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

问题描述:

我试图使用xpath从加载的SimpleXMLElement中获取数据。 Hoever,相同的代码在本地vs dev服务器上产生不同的结果。有人能指出我寻找什么的正确方向吗?SimpleXML与不同服务器上的相同数据的差异

下面是代码作为RAN两个服务器上:上本地(如预期)

<?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) { } } 

我的本地环境是:

  • OSX10.12.6

  • homebrew/php/php56: stable 5.6.31 (bottled), HEAD

  • libxml2: stable 2.9.5 (bottled), HEAD [keg-only]

我的服务器是:

  • Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-57-generic x86_64)

  • PHP 5.5.9-1ubuntu4.16 (cli) (built: Apr 20 2016 14:31:27)

  • /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.1

能够在版本的差异是产生不同的结果?

是否有一些全局配置可能会丢失?

谢谢!

+0

使用'回声$节点[0] - > asXML();'可以给出一些有用的输出。一般来说,'asXML()'可以更好地查看数据而不是'var_dump' –

不要依靠var_dump()输出检查SimpleXMLElement s。我认为您遇到的这个特定问题与bug #66084有关。请参阅this demo,结果在PHP 5.6.10中发生变化,这与您所遇到的一致。 Bug#66084是fixed in PHP 5.6.11

您可能已经知道这一点,但以防万一:$nodes包含一个SimpleXMLElement s列表,而不是它们的值。因此,要获得的节点的值,简单地投每个实例作为一个字符串,隐式或显式:

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