Simplexml and xml namespaces
| From: | Rasmus Lerdorf | Date: | Fri, 19 Aug 2005 02:43:49 +0000 |
| Subject: | Simplexml and xml namespaces | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-18217@lists.php.net to get a copy of this message | ||
I don't really understand how the current xml namespace handling in
simplexml is useful.
test.xml:
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss">
<node>
<title>Title1</title>
<title>Title2</title>
<media:title>Media Title</media:title>
</node>
</rss>
$xml = simplexml_load_file('test.xml');
$xml->node ends up containing a title array that looks like this:
["title"]=>
array(3) {
[0] => string(6) "Title1"
[1] => string(6) "Title2"
[2] => string(11) "Media Title"
}
Of course, I can loop through
$node->children('http://search.yahoo.com/mrss')
and get
["title "]=>
object(SimpleXMLElement)#8 (1) {
[0] => string(11) "Media Title"
}
But how does this really help? I don't see how it is possible to
distinguish the namespaced title vs. the non-namespaced ones. My
suggestion here would be that for namespaced nodes the namespace alias
(or perhaps the actual namespace?) becomes the key in the nodes array.
As in:
["title"]=>
array(3) {
[0] => string(6) "Title1"
[1] => string(6) "Title2"
['media'] => string(11) "Media Title"
}
So people have a shot at distinguishing <media:title> from <title>
Or, alternatively, have a separate arrays:
["title"]=>
array(2) {
[0] => string(6) "Title1"
[1] => string(6) "Title2"
}
["media:title"]=>string(11) "Media Title"
The latter is actually what I was (naiively) expecting.
-Rasmus