Xpath如何选择子节点


Xpath how to select children?

我想选择当前div节点的子节点并将它们保存到变量:

<div id="summary">
<p>aaaaaaa</p>
<p>bbbbbbb</p>
<br>
<p>ccccccc</p>
<a></a>
<p>ddddddd</p>
</div>

我试着

$summary = $dom->saveHTML($xpath->query('//div[@id="summary"]/child::*')->item(0));

但是它只返回第一个p标签,这对我来说很奇怪,因为'*'应该得到所有的孩子,所以我可以在哪里修复它来选择所有的孩子,而不是只有第一个?

两个罪魁祸首是saveHTML和"->item(0)"。该查询返回一个值数组,您可以通过foreach循环访问每个元素。

<?php
$content = 
'<div id="summary">
<p>aaaaaaa</p>
<p>bbbbbbb</p>
<p>ccccccc</p>
<a></a>
<p>ddddddd</p>
</div>';
$xml = new SimpleXMLElement($content);

$entries =  $xml->xpath('//div[@id="summary"]/child::*');
foreach ($entries as $entry) {
    echo $entry;
}
?>

我为一个格式良好的示例删除了break。在上面的代码中,$entries包含一个包含所有适当值(aaaaaaa到ddddddd)的数组。"item(0)"访问数组的第一个元素。Xpath是正确的,但是这两个函数的使用是错误的。问题是,你是想给变量赋值,还是序列化结果?

saveHTML将使用"createElement"创建的文档转储为字符串。将信息保存在变量中非常简单,只需对其赋值即可。