试着想出一个更短的方法来做到这一点:
我正在使用simpleXMLElement来解析xml文件,当我知道我想要什么节点时,它必须调用两行来处理数组。
当前代码:
$xml = new SimpleXMLElement($data);
$r = $xml->xpath('///givexNumber');
$result["cardNum"] = $r[0];
我想做的事情就像我可以用DomX做的那样
$result["cardNum"] = $xml->xpath('///givexNumber')->item(0)->nodeValue;
答案 0 :(得分:1)
我不太了解php,但不应该:
$result["cardNum"] = (new SimpleXMLElement($data))->xpath('///givexNumber')[0]
与
相同$xml = new SimpleXMLElement($data);
$r = $xml->xpath('///givexNumber');
$result["cardNum"] = $r[0];
2013年7月编辑:是的,因为PHP 5.4。随着我的补充一点点修正。这意味着现在所有稳定(非生命终结)版本的PHP都支持这种版本。
答案 1 :(得分:1)
在PHP< 5.4(支持数组取消引用函数或方法调用的结果)您可以在list
的帮助下访问第一个元素:
list($result["cardNum"]) = $xml->xpath('//givexNumber');
自PHP 5.4以来,它更直接:
$result["cardNum"] = $xml->xpath('//givexNumber')[0];
如果xpath方法返回一个至少包含一个元素的数组,请注意这些只能在没有任何通知的情况下工作。如果您不确定并且需要默认值,则可以使用数组联合运算符来实现。
在PHP< 5.4默认返回值为NULL
的代码为:
list($result["cardNum"]) = $xml->xpath('//givexNumber[1]') + array(NULL);
对于PHP 5.4+,它类似,这里的好处是新的数组语法只有方括号:
list($result["cardNum"]) = $xml->xpath('//givexNumber[1]') + [NULL];
参见:
请注意边距:因为您只需要一个元素,所以您不应该通过xpath返回多个元素:
$result["cardNum"] = $xml->xpath('//givexNumber[1]')[0]; ###