我正在尝试在php中学习XML,但在使用命名空间时我有些不明白。
这是我的代码
$xml_data = new SimpleXMLElement("<rss xmlns:g=\"http://base.google.com/ns/1.0\" version=\"2.0\"></rss>");
$make = $xml_data->addChild('channel');
$make->addChild('g:model', 'foo', 'g');
$make->addChild('g:model', 'bar', 'g');
header ("Content-Type:text/xml");
print_r($xml_data->asXML());
在互联网上查看指南时,我希望能够得到这个。
<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">
<channel>
<g:model>foo</model>
<g:model>bar</g:model>
</channel>
</rss>
但我得到了这个
<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">
<channel>
<g:model xmlns:g="g">foo</model>
<g:model xmlns:g="g">bar</g:model>
</channel>
</rss>
为什么我会得到额外的xmlnsg:=&#34; g&#34;它做了什么?看看其他的饲料,他们似乎没有得到这个?
提前致谢!
答案 0 :(得分:1)
添加子项时必须省略xmlns
别名,并在第3个参数(不是别名)中提供完整的xmlns
:
$make->addChild('model', 'foo', 'http://base.google.com/ns/1.0');
您可以使用技术like this来简化/干掉名称空间的管理
回复:<g:model xmlns:g="g">foo</model>
做了什么?
这会覆盖先前对g
别名的定义(并在您的情况下将其破坏为g
)