5

i.e. - i want to return a string "yellow" using something like xpath expression "//banana/@color" and the following example xml...

<fruits> <kiwi color="green" texture="hairy"/> <banana color="yellow" texture="waxy"/> </fruits> $fruits = simplexml_load_string( '<fruits> <kiwi color="green" texture="hairy"/> <banana color="yellow" texture="waxy"/> </fruits>'); print_r($fruits->xpath('//banana/@color')); 

produces

Array ( [0] => SimpleXMLElement Object ( [@attributes] => Array ( [color] => yellow ) ) ) 

whereas i would prefer something like...

Array ( [0] => SimpleXMLElement Object ( [0] => yellow ) ) 

...so that i don't need to write a special case into the application i'm writing.

thanks very much! :)

1 Answer 1

9

I just gave your test a shot because i was curious and I found that it does actually produce the string value yellow when converted to string.

$fruits = simplexml_load_string( '<fruits> <kiwi color="green" texture="hairy"/> <banana color="yellow" texture="waxy"/> </fruits>'); $found = $fruits->xpath('//banana/@color'); echo $found[0]; 

It would seem this is just how SimpleXmlElement attribute nodes are represented. So you can use this as (string) $found[0] if you are not printing/echoing it directly.

Of course if your depending on the value remaining a SimpleXMLElement then that could be an issue I suppose. But i would think just remembering to cast as string when you go to use the node later would still be doable.

IF you really need a detailed interface for Nodes that supports an Attribute as a node then you may want to just switch to DOMDocument. You code will get more verbose, but the implementation is more clear.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.