使用命名空间的simplexml中的额外数据

时间:2014-04-03 06:32:38

标签: php xml simplexml

我正在尝试在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;它做了什么?看看其他的饲料,他们似乎没有得到这个?

提前致谢!

1 个答案:

答案 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