使用php中带有xpath的属性从xml中获取值


Get value from xml using the attribute with xpath in php

我想从这个xml:中获得带有name="userID"的参数的值'23452345235'

<?xml version="1.0" encoding="UTF-8"?>
    <callout>
        <parameter name="UserID">
            23452345235
        </parameter>
        <parameter name="AccountID">
            57674567567
        </parameter>
        <parameter name="NewUserID">
            54745674566
        </parameter>
     </callout>

我使用的是这个代码:

$xml = simplexml_load_string($data);
$myDataObject = $xml->xpath('//parameter[@name="UserID"]');
var_dump($myDataObject);

我得到了这个:

array(1) {
[0] =>
    class SimpleXMLElement#174 (1) {
        public $@attributes =>
        array(1) {
          'name' =>
          string(6) "UserID"
        }
    }
}

实际上,我想获得23452345235的值,或者接收参数来获得这个值。

我做错了什么?

您可以(可选)将它放在一个循环下。像这样:

$myDataObject = $xml->xpath('//parameter[@name="UserID"]');
foreach($myDataObject as $element) {
    echo $element;
}

或者直接:

echo $myDataObject[0];

实际上很简单,正如在var_dump()上看到的那样,它是一个数组,所以可以这样访问它。

SimpleXMLElement::xpath()只能返回SimpleXMLElement对象的数组,因此它生成一个元素并将提取的属性附加到它。

DOMXpath::evaluate()可以从Xpath表达式返回标量值:

$dom = new DOMDocument();
$dom->loadXml($xml);
$xpath = new DOMXpath($dom);
var_dump($xpath->evaluate('normalize-space(//parameter[@name="UserID"])'));

输出:

string(11) "23452345235"