【发布时间】:2011-12-01 12:09:45
【问题描述】:
如果我知道要查找的节点的名称,但我可能不一定知道节点的路径,我需要在 PHP 中查询 XML 字符串。
我想我可以用 xpath 做到这一点,但我不知道如何设置一个相对路径来查看文档中的任何位置,有人能指出我正确的方向吗?
我目前正在尝试使用 simpleXML 来实现这一点,但如果有更好的方法,我很想听听。
【问题讨论】:
如果我知道要查找的节点的名称,但我可能不一定知道节点的路径,我需要在 PHP 中查询 XML 字符串。
我想我可以用 xpath 做到这一点,但我不知道如何设置一个相对路径来查看文档中的任何位置,有人能指出我正确的方向吗?
我目前正在尝试使用 simpleXML 来实现这一点,但如果有更好的方法,我很想听听。
【问题讨论】:
不要使用正则表达式来解析 XML!
xpath 中的 descendant(双斜杠)运算符将在所有后代中搜索匹配项。
$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://www.php.net/manual/en/domelement.getelementsbytagname.php
【讨论】: