2015-03-19 32 views
1

我最近更新我的PHP從5.3到5.5,並得到了這個錯誤。PHP 5.5打破empty()SimpleXMLElement

我的XML是:

<search-response> 
    ... 
    ... 
    <results-count>12345</results-count> 
</search-response> 

如果我檢查,如果$值是空的,它始終是。雖然這在PHP 5.3中工作。他們是否改變了empty()方法中的某些內容?

$contents = file_get_contents(dirname(__FILE__). '/dummy.xml'); 
$xml = new SimpleXMLElement($contents); 

function xpath_val($source_xml, $argument_array) { 

    $result = array(); 
    foreach($argument_array as $k => $v){ 
    $node = $source_xml->xpath($v[0]); 

    if (empty($node)) { 
     $value = $node; 
    } else { 
     $value = $node[0]; 
    } 

    if (empty($value)) { 
     $nodeval = ''; 
    } else { 
     $nodeval = strval($value); 
    } 

    echo $nodeval; 
    } 
} 
$arr = array(); 
$arr['info'] = xpath_val($xml,array(
    'count' => array('/search-response/results-count','integer') 
)); 
var_dump($arr); 

編輯 回報$ nodeval;而不是echo $ nodeval;得出:

array(1) { 
    ["info"]=> 
    string(0) "" 
} 
+3

請向我們展示您的**全**和**真**代碼!如何在變量中獲取xml等等 – Rizier123 2015-03-19 10:26:18

+0

錯誤日誌可能會有所幫助,您可以發佈它嗎? – henrik 2015-03-19 10:28:16

+0

我發佈了整個代碼 – user1213904 2015-03-19 10:41:08

回答

3

是的,有針對的empty狀態爲的SimpleXMLElement 5.4開始發生變化。在5.4之前,表示與對象訪問相同的元素的SimpleXMLElementempty($element)的行爲相同,如同其來自SimpleXMLElement::xpath()方法結果數組的那樣。

自PHP 5.4起,當使用empty(其他訪問沒有改變空行爲)時,作爲xpath結果對象的元素現在始終爲true

你很可能不會尋找empty($value)因此,但爲!strlen($value)

要小心,的SimpleXMLElement自帶了很多的魔法,var_dumpprint_r例如不與它很好地工作。還有empty有一些細微差別。

如果測試一個現有的SimpleXMLElement值,將其轉換爲字符串。

如果要驗證元素是否存在,請檢查它的自引用是否爲NULL。

也有關於5.3破解一些bug的報告 - > 5.4版本的變化用SimpleXML: