2011-12-01 47 views
2

我需要在PHP中查询XML字符串我知道我正在寻找的节点的名称,但我可能不一定知道节点。使用PHP simpleXML来找到一个节点我知道它的名字,但不知道它驻留在哪里

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

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

回答

10

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

在xpath中的后代(双斜线)运算符将搜索所有后代以进行匹配。

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

以上等同于DOM方法getElementsByTagName

如果你有其中的元素的生活,你可以使用后代运营商总体思路寻找低于某一节点:

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

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

+2

这有效。另请参阅SimpleXMLElement :: registerXPathNamespace,如果xml元素名称是命名空间的,例如 goat

0

我不确定XML结构是什么样子,但我用这个blog post来帮助解决一些我用XML解析时遇到的问题。它似乎解释的基础知识,加上总是指php.net

我希望这可以帮助,但没有看到完整的问题,我不能完全回答这个问题。

+0

不幸的是,没有一个具体的例子,XML可以改变,但节点名称将保持不变,这就是为什么我要寻找一个通用的解决方案。感谢您的链接,我现在会阅读它。 – Toby

相关问题