簡體   English   中英

不同服務器上具有相同數據的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 我認為您遇到的這個特定問題與錯誤#66084有關 此演示中看到,結果在PHP 5.6.10中發生了變化,這與您所遇到的一致。 錯誤#66084已在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM