Php 不同服务器上相同数据的SimpleXML差异
我正在尝试使用Php 不同服务器上相同数据的SimpleXML差异,php,xml,linux,macos,simplexml,Php,Xml,Linux,Macos,Simplexml,我正在尝试使用xpath从加载的simplexmlement获取数据。 然而,相同的代码在本地服务器和开发服务器上产生不同的结果。有人能告诉我该找什么吗 以下是在两台服务器上运行的代码: <?php $xml = simplexml_load_string('<?xml version="1.0"?> <document> <ADDDATA> <PAGEN>1</PAGEN> <DO
xpath
从加载的simplexmlement
获取数据。
然而,相同的代码在本地服务器和开发服务器上产生不同的结果。有人能告诉我该找什么吗
以下是在两台服务器上运行的代码:
<?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);
开发(wtf)的结果:
我的本地环境是:
OSX10.12.6
homebrew/php/php56:stable 5.6.31(瓶装),HEAD
libxml2:stable 2.9.5(瓶装),桶装[仅桶]
ubuntu14.04.3lts(GNU/Linux 3.13.0-57-generic x86_64)
PHP5.5.9-1ubuntu4.16(cli)(构建时间:2016年4月20日14:31:27)
/usr/lib/x86_64-linux-gnu/libxml2.so.2.9.1
谢谢 不要依赖
var\u dump()
输出来检查simplexmlement
s。我认为你遇到的这个具体问题与此有关。可以看到,PHP5.6.10中的结果发生了变化,这与您的体验是一致的。Bug#66084是
您可能已经知道这一点,但以防万一:$nodes
包含simplexmlement
的列表,而不是它们的值。因此,要获取节点的值,只需将每个实例隐式或显式转换为字符串:
echo $nodes[0]; // 123456789 , implicitly
var_dump($nodes[0]->__toString()); // string(9) "123456789", explicitly
var_dump((string)$nodes[0]); // string(9) "123456789", explicitly
使用
echo$nodes[0]->asXML()代码>可能会提供一些更有用的输出。通常,asXML()
提供了更好的数据视图,而不是var\u dump
array(1) { [0]=> object(SimpleXMLElement)#2 (0) { } }
echo $nodes[0]; // 123456789 , implicitly
var_dump($nodes[0]->__toString()); // string(9) "123456789", explicitly
var_dump((string)$nodes[0]); // string(9) "123456789", explicitly