【发布时间】:2021-06-06 16:42:33
【问题描述】:
我有一个这样的 xml:
<?xml version="1.0" encoding="UTF-8"?>
<foo SeqNum="1">
<bar>1234</bar>
</foo>
<foo SeqNum="20">
<bar>6789</bar>
</foo>
我正在尝试使用此查询获取值 6789:
$xml = "<?xml version="1.0" encoding="UTF-8"?>
<foo SeqNum="1">
<bar>1234</bar>
</foo>
<foo SeqNum="20">
<bar>6789</bar>
</foo>";
$simple = new SimpleXMLElement($xml);
$result = $simple->xpath('//*[@SeqNum="20"]/bar/'); // result gives me nothing
所以我试着让父母像这样
$result = $simple->xpath('//*[@SeqNum="20"]')[0]->asXML();
这给了我:
<foo SeqNum="20">
<bar>6789</bar>
</foo>
所以我快到了,但我真的被我不理解的东西困住了。谢谢!
【问题讨论】:
-
尝试不带尾随
/。请注意,有效的 XML 需要一个文档元素。 -
@ThW 谢谢。我刚试了没用。
-
演示,固定3v4l.org/UrSV0
-
谢谢!我刚刚意识到我的示例并不完整,并且没有包含定义的命名空间。看起来我需要注册命名空间才能对 xml 执行任何查询。当我有时间时,我会修复这个例子。非常感谢您,请随时将解决方案作为解决方案发布,我会这样标记。
-
是的,您必须在调用
xpath()方法的任何 SimpleXMLElement 实例上注册命名空间。实际上,DOMXpath::evaluate()的代码更少。