[英]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.