我在$ 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键应该是字符串(标记名称)而不是数字。我怎么能这样做?
答案 0 :(得分:1)
与SimpleXML一样,print_r
对你说谎。这些对象实际上没有“密钥”为0。
每个对象实际上代表一个XML元素,您可以使用getName()
访问标记名称,使用(string)
强制转换字符串内容,如下所示:
foreach ( $result as $node ) {
echo 'Name: ', $node->getName(), '; ';
echo 'Content: ', (string)$node, '<br />';
}
((string)
实际上是echo
的冗余,因为无论如何它会强制事物串起来,但重要的是要记住其他任何地方以避免错误地绕过整个对象。)