使用PHP simpleXML查找节点我知道它的名称但不知道它所在的位置

时间:2011-12-01 12:09:46

标签: php xml xpath simplexml

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

我想我可以用xpath做到这一点,但我无法弄清楚如何设置一个相对路径来查看文档中的任何位置,是否有人能指出我正确的方向。

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

3 个答案:

答案 0 :(得分:11)

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

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

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

以上等同于DOM方法getElementsByTagName

如果您对元素的位置有一个大概的了解,可以使用后代运算符在某个节点下搜索:

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

如果您需要使用DOMDocument而不是SimpleXML,则可以根据需要使用DOMXPath对象发出xpath指令。 (留给读者练习。)

答案 1 :(得分:1)

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

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

http://querypath.org/

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

答案 2 :(得分:-1)

我不确定XML结构到底是什么样的,但我已经使用这个blog post来帮助解决我在XML解析中遇到的一些问题。它似乎解释了基础知识,并且总是参考php.net

我希望这会有所帮助,但如果没有看到完整的问题,我就无法完全回答这个问题。