2015-03-19 117 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: