使用PHP simpleXML找到一个节点,我知道的名称,但不知道它在哪里驻留


Using PHP simpleXML to find a node I know the name of but not where it resides

我需要在PHP中查询XML字符串,我知道我正在寻找的节点的名称,但我可能不一定知道节点的路径。

我想我可以用xpath做到这一点,但是我不知道如何设置一个相对路径来查看文档中的任何地方,有人能给我指出正确的方向吗

我目前正试图用simpleXML实现这一点,但如果有更好的方法,我很乐意听到。

不要使用正则表达式来解析XML!

xpath中的后代(双斜杠)操作符将在所有后代中搜索匹配项。

$matches = $simplexmlelementobject->xpath('//nameOfElement');

以上等价于DOM方法getElementsByTagName

如果您对元素的位置有一个大致的概念,您可以使用后代操作符在某个节点下面搜索:

$matches = $simplexmlelementobject->xpath('someparentelement[@conditionalattr=something]//nameOfDescendantElementYouWant');

如果需要使用DOMDocument而不是SimpleXML,则可以在必要时使用DOMXPath对象发出xpath指令。(留作读者练习)

虽然我认为使用simplexml的xpath非常简单和有效,但如果您有更多的工作要做,您可能会发现其中一些替代方法更熟悉,因为它们使用dom或css选择器而不是xpath。

http://code.google.com/p/phpquery/

http://querypath.org/

http://www.php.net/manual/en/domelement.getelementsbytagname.php

我不确定XML结构到底是什么样子的,但我已经使用了这篇博客文章来帮助解决一些我遇到的XML解析问题。它似乎解释了基础知识,加上总是引用php.net

我希望这对你有帮助,但是没有看到完整的问题,我不能完全回答这个问题