【发布时间】:2018-09-01 08:31:10
【问题描述】:
我正在尝试使用来自 HTTP POST 的 XML 文件执行简单的 xpath 查找。我一直在拔头发,因为这应该有用!!到目前为止,我发现的所有内容都是命名空间的结果,但我在这个 XML 中没有命名空间。
<?xml version="1.0" encoding="UTF-8"?>
<foo>
<bar>
<name>Frank</name>
</bar>
</foo>
这是我正在使用的简单代码。
$xml = new SimpleXMLElement(file_get_contents("php://input");
print_r($xml->xpath("//FOO/bar/name"));
这给了我一个空数组!
Array
(
[0] => SimpleXMLElement Object
(
)
)
如果我只是做print_r($xml->xpath("//foo")); 我看到它有数据,但是一旦我尝试获取 name 的值,我什么也得不到。 :(
Array
(
[0] => SimpleXMLElement Object
(
[bar] => SimpleXMLElement Object
(
[name] => Frank
)
)
)
什么是交易?谢谢!!
【问题讨论】:
-
FOO !== foo。以为我在用编辑清理代码。 CaSe 敏感性实际上是您的问题。建议关闭作为“错字”问题。 stackoverflow.com/posts/49436522/revisions -
看起来它在 5.6.10 之前就坏了:3v4l.org/sZX7P
-
如果你真的只想要这个值,你可以在 5.4 之前做
$xml->xpath("//foo/bar/name")[0]->__toString()。不过,这并没有解决您尝试为当前版本做的事情的根本问题。 -
5.5 的某些行为发生了变化。在 5.5.31 时它又开始工作了,就像在 5.4 中一样。所以确切的行为将取决于版本。
-
我使用的是损坏列表中的 5.4.16。谢谢亚历克斯。帕特里克,也谢谢你 - 这与发布的答案相似。讨厌那样“怪异”,但似乎是我正在使用的版本。