我正在尝试对早期 xpath 查询的结果执行 xpath 查询。我可以编写 xpath 查询来提取子元素,然后遍历结果元素,将它们传递给另一个函数以进行进一步处理。当我想为每个结果元素应用另一个 xpath 时,我的问题就来了。
给定 XML
<grandfather>
<mother>
<son>1</son>
<son>2</son>
</mother>
<mother>
<daughter>3</daughter>
</mother>
<mother>
<daughter>4</daughter>
<son>5</son>
</mother>
<grandfather>
我可以使用 xpath
/grandfather/mother
获取所有母亲,但是我可以在单独的函数中使用传递的母节点作为下一个查询的相对根来查询这些母节点吗?当 XML 具有您需要注册以使 xpath 正常工作的命名空间时,问题就更加复杂了。使用 SimpleXML,在第一个 xpath 查询之前注册的命名空间前缀不会保留在查询结果中,因此您必须再次注册它以进行后续查询。
最佳答案
您可以使用 ./
对原始 xpathDocument 进行第二次查询,相对于您的第一个结果节点。在查询字符串的开头并使用第一个结果节点作为第二个参数:
$motherList=$xml->query('/grandfather/mother');
$aMother=$motherList[0];
$daughterList=$xml->query('./daugther',$aMother);
关于带有 DOMDocument 或 SimpleXML 的 xpath 结果上的 PHP xpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36849332/