我们可以使用childNodes属性和item()函数来定位基于父节点的子元素,但是,如果父节点和子节点之间的路径太长,则可能有太多的childNodes-&gt ;需要写的item(),就像我下面列出的PHP一样,我想找到P标签里面的内容,根据节点表,你可以检查变量$句子,我不知道是否这是处理这种情况的唯一方法,有没有更好的方法来做到这一点?
HTML
df
这是我的PHP代码
<table>
<tr>
<td>
<p>Sentence 1</p>
</td>
<tr>
<tr>
<td>
<a>Click 1</a>
</td>
<tr>
</table>
<table>
<tr>
<td>
<p>Sentence 2</p>
</td>
<tr>
<tr>
<td>
<a>Click 2</a>
</td>
<tr>
</table>
我需要获取P标签内的值,你可以看到代码真的很长,只是得到P标签内的值,有什么方法我可以缩短代码,比如使用
$content = file_get_contents('./a.html');
$dom = new \domDocument;
@$dom->loadHTML($content);
$dom->preserveWhiteSpace = false;
$xpath = new \DOMXPath($dom);
$table_list = $xpath->query('//table');
foreach($table_list as $k=>$table_node){
$sentence1 = $table_node->childNodes->item(0)->childNodes->item(0)->childNodes->item(0)->nodeValue;
}
而不是反复编写childNodes-&gt; item()?
答案 0 :(得分:0)
$content = file_get_contents('./a.html');
$dom = new \domDocument;
@$dom->loadHTML($content);
$dom->preserveWhiteSpace = false;
$xpath = new \DOMXPath($dom);
$table_list = $xpath->query('//table/tr/td/p');
$sentences = array();
foreach($table_list as $k=>$table_node){
$sentences[] = $table_node->nodeValue;
}
答案 1 :(得分:0)
如果我理解正确,您可以这样做:$xpath->query('/table//p')
。它将返回所有p元素,这些元素是根元素中table元素的直接或间接子元素。