简单的xml添加命名空间的孩子

Posted

技术标签:

【中文标题】简单的xml添加命名空间的孩子【英文标题】:simple xml add namespaced child 【发布时间】:2011-10-12 02:55:56 【问题描述】:

我正在使用 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">

如何添加命名空间的子项?

【问题讨论】:

【参考方案1】:

命名空间是addChild()的第三个参数

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

See the documentation 了解更多信息。

【讨论】:

它对我有用,就像$item-&gt;addChild('g:id', 'myid', 'http://base.google.com/ns/1.0'); 是的,因为我什至在您发布答案之前就已经弄清楚了,而且您的答案仍然有部分帮助。但是由于努力,我将把答案接受给你。谢谢你:) php 文档对此很少提及。这将生成如下所示的内容: base.google.com/ns/1.0">myid</id> 我在 php 文档中没有看到但我在一些代码中看到的内容,将命名空间前缀加倍似乎可以完成这项工作。$ item->addChild('g:g:id', 'myid'); 将输出 myid 如果一些 xml 专家可以确认这是一个可接受的方法会很好。【参考方案2】:

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

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

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

【讨论】:

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

以上是关于简单的xml添加命名空间的孩子的主要内容,如果未能解决你的问题,请参考以下文章

移除 xml 的命名空间

使用 XSL 根据 XML 的条件添加命名空间

命名空间删除xml

使用 Nokogiri 的 XML Builder 添加命名空间

使用 boost 向 XML 添加命名空间

VS2015-项目默认的XML命名空间必须是MSBuild XML命名空间