简单 XML 添加命名空间子项

simple xml add namespaced child

提问人:Ilian Andreev 提问时间:7/25/2011 最后编辑:skaffmanIlian Andreev 更新时间:2/1/2016 访问量:6951

问:

我正在使用 SimpleXML 为 Google 产品创建 RSS 提要,我想创建一个命名空间子项,但当我这样做时,例如

$item->addChild('g:id', 'myid');

它补充说

<id>myid</id>

而不是

<g:id></g:id>

此外,我在顶部添加了

<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">

如何添加命名空间子项?

php simplexml addchild

评论


答:

17赞 Michael Berkowski 7/25/2011 #1

命名空间是addChild()

$item->addChild('id', 'myid', 'http://base.google.com/ns/1.0');

有关详细信息,请参阅文档

评论

1赞 Ilian Andreev 7/25/2011
它对我有用,就像$item->addChild('g:id', 'myid', 'http://base.google.com/ns/1.0');
0赞 Ilian Andreev 7/25/2011
是的,因为我甚至在你发布答案之前就想通了,无论如何你的答案都有部分帮助。但是,由于努力,我将把答案还给你。谢谢:)
0赞 Antony Gibbs 2/1/2016
PHP文档对此说得很少。这将生成如下所示的内容:<id xmlns=“base.google.com/ns/1.0”>myid</id> 我在 php 文档中没有看到,但我在一些代码中看到过,将命名空间前缀加倍似乎可以完成这项工作。$item->addChild('g:g:id', 'myid');将输出 <g:id>myid</g:id> 如果一些 xml 专家可以确认这是一个可接受的 approche,那就太好了。
7赞 Antony Gibbs 2/1/2016 #2

在不知道这是否是官方方法的情况下,我发现了一些可以完成这项工作的方法:

$item->addChild('g:g:id', 'myid');

在此代码上找到此代码 http://www.sanwebe.com/2013/08/creating-rss-feed-using-php-simplexml

评论

1赞 outis 9/14/2016
请注意,这实际上并没有设置节点的命名空间,尽管使用 SimpleXMLElement->asXML() 序列化时的结果是等效的。尝试。$item->children('g', TRUE);
1赞 jiheison 6/28/2021
5.5 年后,这种解决方法仍然是必要的。即使是批准的答案也无法达到某些结果。