Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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';s DOMXpath无法返回子节点的完整集_Php_Xpath - Fatal编程技术网

PHP';s DOMXpath无法返回子节点的完整集

PHP';s DOMXpath无法返回子节点的完整集,php,xpath,Php,Xpath,我有9个表行,但使用DOMXpath查询顶级节点时只返回3行 <table class="something"> <tbody> <tr> <td class="label">One</td> <td>111111</td> </tr> <tr> <td c

我有9个表行,但使用DOMXpath查询顶级节点时只返回3行

<table class="something">
    <tbody>
        <tr>
            <td class="label">One</td>
            <td>111111</td>
        </tr>
        <tr>
            <td class="label">Two</td>
            <td>1454</td>
        </tr>    
        <tr>
            <td class="label">Three</td>
            <td></td>
        </tr>
        <tr>
            <td class="label">Four</td>
            <td>0</td>
        </tr>
        <tr>
            <td class="label">Five</td>
            <td>45</td>
        </tr>
        <tr>
            <td class="label">Six</td>
            <td>45</td>
        </tr>
        <tr>
            <td class="label">Seven</td>
            <td>5</td>
        </tr>
        <tr>
            <td class="label">Eight</td>
            <td>0</td>
        </tr>
        <tr>
            <td class="label">Nine</td>
            <td>0</td>
        </tr>
    </tbody>
</table>
    $request = drupal_http_request($url);

    $data = $request->data;

    $doc = new DOMDocument;
    @$doc->loadHTML($data);
    $tables = $doc->getElementsByTagName('table');
    $rows = $tables->item(2)->getElementsByTagName('tr');
    $output = '';
    foreach($rows as $row) {
        $cols = $row->getElementsByTagName('td');
        foreach($cols as $col){
            $output .= $col->nodeValue . '<br/>';
        }
    }
    return $output;
不幸的是,没有返回完整的表行集——只有前三行。我猜空元素
以某种方式抛出了xpath解析器。有解决办法吗

编辑:

我正在尝试另一种不使用DOMXpath的方法

<table class="something">
    <tbody>
        <tr>
            <td class="label">One</td>
            <td>111111</td>
        </tr>
        <tr>
            <td class="label">Two</td>
            <td>1454</td>
        </tr>    
        <tr>
            <td class="label">Three</td>
            <td></td>
        </tr>
        <tr>
            <td class="label">Four</td>
            <td>0</td>
        </tr>
        <tr>
            <td class="label">Five</td>
            <td>45</td>
        </tr>
        <tr>
            <td class="label">Six</td>
            <td>45</td>
        </tr>
        <tr>
            <td class="label">Seven</td>
            <td>5</td>
        </tr>
        <tr>
            <td class="label">Eight</td>
            <td>0</td>
        </tr>
        <tr>
            <td class="label">Nine</td>
            <td>0</td>
        </tr>
    </tbody>
</table>
    $request = drupal_http_request($url);

    $data = $request->data;

    $doc = new DOMDocument;
    @$doc->loadHTML($data);
    $tables = $doc->getElementsByTagName('table');
    $rows = $tables->item(2)->getElementsByTagName('tr');
    $output = '';
    foreach($rows as $row) {
        $cols = $row->getElementsByTagName('td');
        foreach($cols as $col){
            $output .= $col->nodeValue . '<br/>';
        }
    }
    return $output;
$request=drupal\u http\u请求($url);
$data=$request->data;
$doc=新文档;
@$doc->loadHTML($data);
$tables=$doc->getElementsByTagName('table');
$rows=$tables->item(2)->getElementsByTagName('tr');
$output='';
foreach($行作为$行){
$cols=$row->getElementsByTagName('td');
foreach($cols作为$col){
$output.=$col->nodeValue.“
”; } } 返回$output;
这两种方法都输出此HTML:

<div class="content">
    One<br>111111<br>Two<br>1454<br>Three<br><br>
</div>

一个
111111
两个
1454
三个


在第一个示例中,$tableRows->length为3,与输出一致,但与包含9行的标记不一致。

我正在抓取一个包含无效、损坏、脏HTML的网页。我想我喜欢整洁有序。相反,我使用脚本来解析HTML,它工作得很好。

不确定这是一个转录错误还是代码输入错误,但上面的table类是有意义的,而不是有意义的。其次,我通过该查询得到了8//tr结果,结果很好?您的XPath非常好。接下来的PHP代码是什么?可能问题就出在那里。可能是我正在刮一个标记不好的网页,并且正在扔掉它。完整的页面会很有帮助。一个很小的可能性是,你的显示例行程序是摆脱你?尝试遍历$tableRows:foreach($tableRows as$row){echo“{$row->nodeName}\n”}似乎在将“something”更正为“something”后工作: