Let's say I have some XML like this
<channel>
<item>
<title>This is title 1</title>
</item>
</channel>
The code below does what I want in that it outputs the title as a string
$xml = simplexml_load_string($xmlstring);
echo $xml->channel->item->title;
Here's my problem. The code below doesn't treat the title as a string in that context so I end up with a SimpleXML object in the array instead of a string.
$foo = array( $xml->channel->item->title );
I've been working around it like this
$foo = array( sprintf("%s",$xml->channel->item->title) );
but that seems ugly.
What's the best way to force a SimpleXML object to a string, regardless of context?
-
Typecast the SimpleXMLObject to a string:
$foo = array( (string) $xml->channel->item->title );The above code internally calls
__toString()on the SimpleXMLObject. This method is not publicly available, as it interferes with the mapping scheme of the SimpleXMLObject, but it can still be invoked in the above manner.Mark Biek : That's cleaner than using a sprintf. I like itRoss : Note that using a function that accepts string arguments will automatically do this type casting (e.g. echo, str_replace, substr).Neil Aitken : Thanks Aron, I thought a typecast was the way to do this but it just didnt feel right. Now that I know the _toString method is private it makes sense. -
I agree with Aron. Type-casting using (string) will do the trick. I had the very same problem a few months ago.
May I suggest you use DOMDocument to read XML in PHP. SimpleXML is fun to start with, but you soon find its limits.
DOMDocument is what is used underneath SimpleXML.
null : note that dom_import_simplexml() can be used, so DOM can conjunction with simpleXML. -
You can use the PHP function
strval();This function returns the string values of the parameter passed to it.
Mark Biek : Unfortunately strval() doesn't work on arrays or objects.
0 comments:
Post a Comment