代码之家  ›  专栏  ›  技术社区  ›  Senica Gonzalez

SimpleXMLElement获取一行中的第一个XPath元素[重复]

  •  3
  • Senica Gonzalez  · 技术社区  · 15 年前

    只是想找出一个简单的方法:

    我使用simplexmlement来解析一个xml文件,当我知道需要哪个节点时,不得不调用两行代码来处理一个数组,这让我很恼火。

    当前代码:

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

    $result["cardNum"] = $xml->xpath('///givexNumber')->item(0)->nodeValue;
    
    2 回复  |  直到 12 年前
        1
  •  1
  •   hakre    12 年前

    我不太懂php,但不应该:

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

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

    2013年7月编辑: 是的,从PHP5.4开始就是这样。我加了一点更正。这意味着到目前为止所有稳定(非生命周期结束)的PHP版本都支持这一点。

        2
  •  1
  •   Community CDub    8 年前

    在PHP<5.4(支持对函数或方法调用的结果进行数组解引用)中,您可以通过 list

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

    自PHP 5.4以来,它更直接地包括:

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

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

    NULL 可能是:

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

    对于PHP5.4+,这是类似的,这里的一个好处是新的数组语法只有方括号:

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

    另请参见:


    在页边空白处注明:

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