【问题标题】:SimpleXMLElement get first XPath Element in one line [duplicate]SimpleXMLElement 在一行中获取第一个 XPath 元素 [重复]
【发布时间】:2010-05-12 01:35:27
【问题描述】:

只是想找到一种更短的方法来做到这一点:

我正在使用 simpleXMLElement 来解析一个 xml 文件,当我知道我想要什么节点时,不得不调用两行来处理一个数组,这很麻烦。

当前代码:

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

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

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

【问题讨论】:

标签: php xpath simplexml


【解决方案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 的所有稳定(非生命周期结束)版本现在都支持它。

【讨论】:

  • 人们会想。但是 $r = $xml->xpath('///givexNumber')[0] 不起作用。
【解决方案2】:

在 PHP list 的帮助下访问第一个元素:

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

从 PHP 5.4 开始,它更直接:

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

请注意,如果 xpath 方法返回一个包含至少一个元素的数组,这些方法只会在没有任何通知的情况下工作。如果您对此不确定并且需要一个默认值,可以使用数组联合运算符来实现。

在 PHP 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];
                                               ###

【讨论】:

    猜你喜欢
    • 2022-08-17
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 2016-07-27
    相关资源
    最近更新 更多