繁体   English   中英

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

[英]PHP's DOMXpath fails to return the complete set of children nodes

我有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>

我使用DOMDocument加载HTML。

$doc = new DOMDocument;
@$doc->loadHTML($htmlData);
$xpath = new DOMXpath($doc);
$tableRows = $xpath->query('//table[@class="something"]//tr');

不幸的是,没有返回完整的表行集-仅返回前三行。 我猜想空元素<td></td>正在某种程度上抛出xpath解析器。 有针对这个的解决方法吗?

编辑:

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

    $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;

两种方法都输出以下HTML:

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

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

我正在抓取具有无效,损坏,脏HTML的网页。 DOMDocument喜欢干净整洁(我想)。 相反,我使用的是simple_html_dom.php脚本来解析HTML,它可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM