PHP SimpleXMLElement xpath
PHP SimpleXMLElement xpath
我正在尝试使用来自 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
)
)
)
这是怎么回事??谢谢!!
This gives me an empty array!
不,不是。仔细观察你的输出,你会发现你有一个包含一个结果的数组,它是一个 SimpleXMLElement
对象。
不幸的是,print_r
不能很好地处理 SimpleXMLElement
对象,并且在某些版本的 PHP 中效果比其他版本更好,因此它不能准确地向您显示 你有什么 SimpleXMLElement
。
但是你的生产代码不会依赖print_r
,它会依赖那个元素的实际内容,所以让我们看看我们是否能得到内容:
// Text content of an element is (string)$element
var_dump( (string)$first_result ); # string(5) "Frank"
// Render element back to XML
var_dump( $first_result->asXML() ); # string(18) "<name>Frank</name>"
这在 all versions of PHP on 3v4l.org 中给出了正确的输出。所以实际上根本没有问题! :)
我正在尝试使用来自 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
)
)
)
这是怎么回事??谢谢!!
This gives me an empty array!
不,不是。仔细观察你的输出,你会发现你有一个包含一个结果的数组,它是一个 SimpleXMLElement
对象。
不幸的是,print_r
不能很好地处理 SimpleXMLElement
对象,并且在某些版本的 PHP 中效果比其他版本更好,因此它不能准确地向您显示 你有什么 SimpleXMLElement
。
但是你的生产代码不会依赖print_r
,它会依赖那个元素的实际内容,所以让我们看看我们是否能得到内容:
// Text content of an element is (string)$element
var_dump( (string)$first_result ); # string(5) "Frank"
// Render element back to XML
var_dump( $first_result->asXML() ); # string(18) "<name>Frank</name>"
这在 all versions of PHP on 3v4l.org 中给出了正确的输出。所以实际上根本没有问题! :)