给定一个xpathTables.html
这样的 HTML 文档:
<html>
<body>
<table>
<tbody>
<tr><td class="body" valign="top"><a href="example"><b>DATA</b></a></td><td class="body" valign="top">Data_Text</td></tr>
</tbody>
</table>
<table>
<tbody>
<tr><th><div id="Data">Data</div></th><td>Data_Text_1</td><td>Data_Text_2</td></tr>
</tbody>
</table>
<table>
<tbody>
<tr><td width="120"><a href="example" target="_blank">DATA</a></td><td>Data_Text</td></tr>
</tbody>
</table>
</body>
</html>
这个 PHP 脚本:
<?php
$link = "xpathTables.html";
$html = file_get_contents($link);
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$tables = $doc->getElementsByTagName('table');
$nodes = $xpath->query('.//tbody/tr/td/a/b', $tables->item(0));
var_dump($nodes->item(0)->nodeValue);
$nodes = $xpath->query('.//tbody/tr/td[@class="body"]', $tables->item(0));
var_dump($nodes->item(1)->nodeValue);
$nodes = $xpath->query('.//tbody/tr/th/div[@id="Data"]', $tables->item(1));
var_dump($nodes->item(0)->nodeValue);
$nodes = $xpath->query('.//tbody/tr/td', $tables->item(1));
var_dump($nodes->item(0)->nodeValue);
$nodes = $xpath->query('.//tbody/tr/td', $tables->item(1));
var_dump($nodes->item(1)->nodeValue);
$nodes = $xpath->query('.//tbody/tr/td/a', $tables->item(2));
var_dump($nodes->item(0)->nodeValue);
$nodes = $xpath->query('.//tbody/tr/td', $tables->item(2));
var_dump($nodes->item(1)->nodeValue);
你得到这个输出:
string(4) "DATA"
string(9) "Data_Text"
string(4) "Data"
string(11) "Data_Text_1"
string(11) "Data_Text_2"
string(4) "DATA"
string(9) "Data_Text"
我没有很好地理解你的问题,所以我做了这个例子来显示你的表的所有文本节点。如果您只对其中一些节点感兴趣,您应该选择完成这项工作的 XPath 查询。
我包含了标签table
和tbody
,只是为了使示例更像 HTML。