Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 返回零_Php_Dom_Xpath_Domxpath - Fatal编程技术网

Php 返回零

Php 返回零,php,dom,xpath,domxpath,Php,Dom,Xpath,Domxpath,我试图从一个网站上提取一些信息。我需要的信息包含在一个表中,我已经创建了一个查询来查找它。当从Chrome使用控制台时,我可以看到我需要的表是由表达式返回的。但是当我设置PHP代码时,查询返回零 这是来自Chrome控制台的 这是我的PHP代码 $ch = curl_init($domain); curl_setopt($ch,CURLOPT_RETURNTRANSFER, true); $cl = curl_exec($ch); $dom = new DOMDocument(); @$dom

我试图从一个网站上提取一些信息。我需要的信息包含在一个表中,我已经创建了一个查询来查找它。当从Chrome使用控制台时,我可以看到我需要的表是由表达式返回的。但是当我设置PHP代码时,查询返回零

这是来自Chrome控制台的

这是我的PHP代码

$ch = curl_init($domain);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
$cl = curl_exec($ch);
$dom = new DOMDocument();
@$dom->loadHTML($cl);
$xpath = new DOMXPath($dom);

$table = $xpath->query("//div[@id='content_fmainplace']//form/table/tbody/tr[15]//table");
echo $table->length;

有什么想法吗?我在这里遗漏了什么?

您真的不需要针对div。只需针对表的
id
。考虑这个例子:

$domain=http://app.cfe.gob.mx/Aplicaciones/CCFE/Tarifas/Tarifas/tarifas_casa.asp?Tarifa=DACTAR1E&Temporada4=Verano&Anio=2014&imprime=&Periodo=4&mes2=a+七膜&mes=1’;
$ch=curl\u init($domain);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$cl=旋度执行($ch);
$dom=新的DOMDocument();
libxml\u使用\u内部错误(true);
$dom->loadHTML($cl);
libxml_clear_errors();
$xpath=newdomxpath($dom);
//以标题为目标
$title=$values=$xpath->query('//table[@id=“Table1”]/tr[1]/td[1]/form/table/tr[14])->item(0)->nodeValue;//标题行
$rows=$xpath->query('//table[@id=“Table1”]/tr[1]/td[1]/form/table/tr[15]/td/table/tr');
$row_values=array();
//处理td元素
foreach($index=>$row的行){
foreach($row->childNodes作为$td){
//清理
$row_values[$index][]=preg_replace('/\s+/','',trim($td->nodeValue));
}
//重新打扫
$row_值[$index]=数组_过滤器($row_值[$index]);
}    
?>

您是否尝试过不抑制错误消息?很难猜测,是否愿意共享站点链接?@kevinabelita这是链接,我需要的信息在2.1节@elgranchuy下,一个多么痛苦的站点的html结构!2.1节的哪一部分?标题及其内容?@Kevinabellita我知道,这是我每天都要处理的:(.无论如何……我想我发现了“错误”。看起来tbody不工作或者没有被检测到。我不知道Chrome/Firefox是否会将tbody标记添加到每个表中,或者DOMXPath没有检测到它。我将查询更改为
//div[@id='content\u fmainplace']//form/table//tr[15]//表
及其现在的工作状态。是的,我确实看到了表id,但问题是,这个链接是针对1E节的1月份费率的,如果您将该节更改为不同的1A、1B、1C或1D节,代码会有一点变化,其中一些节中缺少表id。我注意到我使用的查询适用于所有这些节。
$domain = 'http://app.cfe.gob.mx/Aplicaciones/CCFE/Tarifas/Tarifas/tarifas_casa.asp?Tarifa=DACTAR1E&Temporada4=Verano&Anio=2014&imprime=&Periodo=4&mes2=a+septiembre.&mes=1';
$ch = curl_init($domain);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
$cl = curl_exec($ch);
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($cl);
libxml_clear_errors();
$xpath = new DOMXPath($dom);

// target the title
$title = $values = $xpath->query('//table[@id="Table1"]/tr[1]/td[1]/form/table/tr[14]')->item(0)->nodeValue; // title rows
$rows = $xpath->query('//table[@id="Table1"]/tr[1]/td[1]/form/table/tr[15]/td/table/tr');
$row_values = array();

// process td elements
foreach($rows as $index => $row) {
    foreach($row->childNodes as $td) {
        // clean up
        $row_values[$index][] = preg_replace( '/\s+/', '', trim($td->nodeValue));
    }
    // clean up again
    $row_values[$index] = array_filter($row_values[$index]);
}    

?>

<!-- print them -->
<h1><?php echo $title; ?></h1>
<table cellpadding="10">
<?php foreach($row_values as $values): ?>
    <tr><?php foreach($values as $value): ?>
        <td><?php echo $value; ?></td>
    <?php endforeach; ?></tr>
<?php endforeach; ?>
</table>