0
我有9個錶行,但只有三個得到返回時,我查詢頂級節點與DOMXpath。PHP的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>
我使用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->長度爲3,其與所述輸出但不具有9行的標記相一致。
不知道這是否是一個抄寫錯誤或代碼錯字,但上面的表類是somethiing而不是某些東西。其次,我得到8/tr結果與該查詢就好了? – pp19dd
您的XPath完全正常。之後會有什麼PHP代碼?問題可能在那裏。 –
這可能是我颳了一個壞標記的網頁,正在拋出DOMDocument –