Xpath如何选择孩子?

时间:2015-08-07 14:41:29

标签: php xpath domdocument

我想选择当前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标签,这对我来说很奇怪因为'*'应该让所有的孩子都有,所以在哪里可以修复它来选择所有的孩子而不是只有第一个?< / p>

1 个答案:

答案 0 :(得分:1)

两个罪魁祸首是saveHTML和&#34; - &gt; item(0)&#34;。查询返回一个值数组,您可以通过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;
}
?>

我删除了一个结构良好的例子。在上面的代码中,$ entries包含一个包含所有适当值(aaaaaaa到ddddddd)的数组。 &#34;项目(0)&#34;访问数组的第一个元素。你的Xpath是正确的,但使用这两个函数是错误的。问题是,您是要分配给变量还是序列化结果?

saveHTML使用&#34; createElement&#34;转储您创建的文档。成一个字符串。将信息保存在变量中非常简单,只需分配给它。