首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

PHP
EN

Stack Overflow用户
提问于 2018-03-22 19:02:44
回答 1查看 73关注 0票数 1

我试图使用来自HTTP的XML文件执行简单的xpath查找。我一直在拔头发,因为这应该管用!!到目前为止,我发现的一切都是名称空间的结果,但是在这个XML中没有命名空间。

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<foo>
 <bar>
  <name>Frank</name>
 </bar>
</foo>

下面是我使用的简单代码。

代码语言:javascript
运行
复制
$xml = new SimpleXMLElement(file_get_contents("php://input");
print_r($xml->xpath("//FOO/bar/name"));

这给了我一个空数组!

代码语言:javascript
运行
复制
Array
(
  [0] => SimpleXMLElement Object
      (
      )
)

如果我只做print_r($xml->xpath("//foo"));,我就会看到它有数据,但是只要我试图得到名称的值,我就什么也得不到。:(

代码语言:javascript
运行
复制
Array
(
  [0] => SimpleXMLElement Object
      (
      [bar] => SimpleXMLElement Object
         (
              [name] => Frank
         )
      )
)

怎么回事??谢谢你!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-22 19:39:39

这给了我一个空数组!

不,没有。仔细看看您的输出,您将看到有一个数组,其中只有一个结果,即SimpleXMLElement对象。

不幸的是,print_r不能很好地处理SimpleXMLElement对象,而且在某些版本中,SimpleXMLElement比其他版本工作得更好,所以它不能准确地显示您拥有的SimpleXMLElement

但是您的生产代码将不依赖于print_r,它将依赖于该元素的实际内容,所以让我们看看是否可以获得内容:

代码语言:javascript
运行
复制
// 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>"

这在3v4l.org上所有版本的PHP中给出了正确的输出。所以根本就没有问题!:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49436522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档