不同服务器上相同数据的 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) { } }
我的本地环境是:
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
版本的差异是否会产生不同的结果?
我可能缺少一些全局配置吗?
谢谢!
不要依赖 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
我正在尝试使用 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) { } }
我的本地环境是:
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
版本的差异是否会产生不同的结果?
我可能缺少一些全局配置吗?
谢谢!
不要依赖 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