带有 DOMDocument 或 SimpleXML 的 xpath 结果上的 PHP xpath

标签 php xml xpath simplexml domdocument

我正在尝试对早期 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/

相关文章:

python - 使用 xml.dom.minidom 时在 xml 中转义 '<' 和 '>'

mysql - 什么是 Xpath 注入(inject),使用 mysql 数据库的网站是否容易受到这种注入(inject)?

python - 尝试使用 scrapy "Mobilya"通过 xpath 从 html 获取文本

php - 如何在 Laravel 5 中执行查询? DB::getQueryLog() 返回空数组

php - 为 Bootstrap 按钮组设置 Codeigniter 的 form_submit 样式

java - 在 SimpleXML (java) 中动态分配属性名称

python - lxml 获取倒数第二个元素

php - 检查是否设置了cookie,如果没有则输出脚本

PHP/ session : Login one per user?

Python ElementTree 使用特殊字符 '\x0b' 生成格式不正确的 XML 文件