PHP 中的 XPath - SimpleXMLElement 键数字而不是文本

XPath in PHP - SimpleXMLElement key numeric instead of textual

我在 $string

中保存了以下 XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<users>
  <user id="1">
    <name>Michael Tray</name>
    <account>473.43</account>
  </user>
  <user id="2">
    <name>Sandra Marry</name>
    <account>154.24</account>
  </user>
</users>

我使用以下简单的 XPath 表达式来获取所有名称

$xml = simplexml_load_string($string);
$result = $xml->xpath("/users/user/name");
echo "<pre>";
print_r($result);
echo "</pre>";

我得到了什么

Array (
    [0] => SimpleXMLElement Object
        (
            [0] => Michael Tray
        )

    [1] => SimpleXMLElement Object
        (
            [0] => Sandra Marry
        )
)

我想要的

Array (
    [0] => SimpleXMLElement Object
        (
            [name] => Michael Tray
        )

    [1] => SimpleXMLElement Object
        (
            [name] => Sandra Marry
        )
)

所以 SimpleXMLElement 键应该是一个字符串(标签名称)而不是一个数字。我该怎么做?

与 SimpleXML 一样,print_r 是在骗你。这些对象根本没有 "key" 0。

每个对象实际上代表一个单独的XML元素,您可以使用getName()访问标签名称,并使用(string)转换访问字符串内容,如下所示:

foreach ( $result as $node ) {
    echo 'Name: ', $node->getName(), '; ';
    echo 'Content: ', (string)$node, '<br />';
}

(string) 实际上与 echo 是多余的,因为它无论如何都会强制将事物串起来,但重要的是要记住其他任何地方以避免错误地传递整个对象。)