【问题标题】:simple xml add namespaced child简单的xml添加命名空间的孩子
【发布时间】: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">

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

【问题讨论】:

    标签: php simplexml addchild


    【解决方案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 年后,这种解决方法仍然是必要的。即使是批准的答案也无法达到某些结果。
    猜你喜欢
    • 1970-01-01
    • 2011-09-16
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 2023-03-24
    • 2017-09-21
    • 1970-01-01
    相关资源
    最近更新 更多