2017-10-13 73 views
1

我試圖使用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' –

回答

2

不要依靠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 
相關問題