SimpleXMLElement在一行中获取第一个XPath元素

时间:2010-05-12 01:35:28

标签: php xpath simplexml

试着想出一个更短的方法来做到这一点:

我正在使用simpleXMLElement来解析xml文件,当我知道我想要什么节点时,它必须调用两行来处理数组。

当前代码:

$xml = new SimpleXMLElement($data);
$r = $xml->xpath('///givexNumber');
$result["cardNum"] = $r[0];

我想做的事情就像我可以用DomX做的那样

$result["cardNum"] = $xml->xpath('///givexNumber')->item(0)->nodeValue;

2 个答案:

答案 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];
                                               ###