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

时间:2015-03-23 15:13:58

标签: php xpath simplexml

我在$ 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键应该是字符串(标记名称)而不是数字。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

与SimpleXML一样,print_r对你说谎。这些对象实际上没有“密钥”为0。

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

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

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