【问题标题】:Extra data in simplexml using namespaces使用命名空间的 simplexml 中的额外数据
【发布时间】:2023-03-05 13:53:01
【问题描述】:

我正在尝试在 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:="g",它有什么作用?查看其他提要,他们似乎没有得到这个?

提前致谢!

【问题讨论】:

    标签: php xml simplexml


    【解决方案1】:

    添加子时必须省略xmlns 别名,并在第三个参数(不是别名)中提供完整的xmlns

    $make->addChild('model', 'foo', 'http://base.google.com/ns/1.0');
    

    您可以使用like this 技术来简化/干燥命名空间的管理

    回复:&lt;g:model xmlns:g="g"&gt;foo&lt;/model&gt; 是做什么的?
    这会覆盖 g 别名的先前定义(并在您的情况下将其损坏为 g

    【讨论】:

    • 完美!做到了:) 非常感谢!
    猜你喜欢
    • 2011-01-02
    • 2012-01-06
    • 1970-01-01
    • 2013-01-28
    • 2012-11-10
    • 2020-04-19
    • 2013-04-30
    • 1970-01-01
    相关资源
    最近更新 更多