PHP SimpleXMLElement xpath

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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"));我看到它有数据,但一旦我试图获得名称的价值,我什么也得不到。 :(

Array
(
  [0] => SimpleXMLElement Object
      (
      [bar] => SimpleXMLElement Object
         (
              [name] => Frank
         )
      )
)

这笔交易是什么?谢谢!!

答案

这给了我一个空数组!

不,不。仔细观察你的输出,你会看到你有一个数组,其中包含一个结果,这是一个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中给出了正确的输出。所以实际上根本没有问题! :)

以上是关于PHP SimpleXMLElement xpath的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 中回显此 SimpleXMLElement 中的 OK 属性? [复制]

PHP:SimpleXMLElement() 类和 SimpleXML_load_string() 有啥区别?

php 扩展SimpleXMLElement

PHP中SimpleXMLElement对象字符编码

解决PHP-问题:Class 'SimpleXMLElement' not found in

阿里大鱼simplexmlelement object 取值PHP