不同服务器上相同数据的 SimpleXML 差异

SimpleXML differences with same data on different servers

我正在尝试使用 xpath 从加载的 SimpleXMLElement 中获取数据。 然而,相同的代码在本地服务器和开发服务器上会产生不同的结果。有人可以指出我要寻找的正确方向吗?

这是两台服务器上 运行 的代码:

<?php

$xml = simplexml_load_string('<?xml version="1.0"?>
<document>
    <ADDDATA>
        <PAGEN>1</PAGEN>
        <DOCN>123456789</DOCN>
        <DATE>06.07.2017</DATE>
    </ADDDATA>
</document>
');

$nodes = $xml->xpath('//DOCN');

var_dump($nodes);

本地结果(如预期):

array (size=1)
  0 => 
    object(SimpleXMLElement)[3]
      public 0 => string '123456789' (length=9)

dev (wtf) 的结果:

array(1) { [0]=> object(SimpleXMLElement)#2 (0) { } }

我的本地环境是:

我的服务器是:

版本的差异是否会产生不同的结果?

我可能缺少一些全局配置吗?

谢谢!

不要依赖 var_dump() 输出来检查 SimpleXMLElement。我认为您遇到的这个具体问题与 bug #66084. See in this demo that the results change in PHP 5.6.10, which is consistent with what you're experiencing. Bug #66084 was fixed in PHP 5.6.11.

有关

您可能已经知道这一点,但以防万一:$nodes 包含 SimpleXMLElement 的列表,而不是它们的值。因此,要获取节点的值,只需将每个实例隐式或显式地转换为字符串即可:

echo $nodes[0]; // 123456789 , implicitly
var_dump($nodes[0]->__toString()); // string(9) "123456789", explicitly
var_dump((string)$nodes[0]); // string(9) "123456789", explicitly