I have the following XML saved in $string
<?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>
I use the following simple XPath expression to get all names
$xml = simplexml_load_string($string);
$result = $xml->xpath("/users/user/name");
echo "<pre>";
print_r($result);
echo "</pre>";
What I get
Array (
[0] => SimpleXMLElement Object
(
[0] => Michael Tray
)
[1] => SimpleXMLElement Object
(
[0] => Sandra Marry
)
)
What I want
Array (
[0] => SimpleXMLElement Object
(
[name] => Michael Tray
)
[1] => SimpleXMLElement Object
(
[name] => Sandra Marry
)
)
So the SimpleXMLElement key should be a string (tag name) and not a number. How can I do that?
As usual with SimpleXML, print_r is lying to you. The objects don't really have a "key" of 0 at all.
Each object actually represent a single XML element, and you can access the tag name using getName(), and the string content with a (string) cast, as follows:
foreach ( $result as $node ) {
echo 'Name: ', $node->getName(), '; ';
echo 'Content: ', (string)$node, '<br />';
}
(The (string) is actually redundant with echo, because it forces things to string anyway, but is important to remember anywhere else to avoid passing around the whole object by mistake.)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With