xml查找节点父节点并删除simplexml php

Posted

技术标签:

【中文标题】xml查找节点父节点并删除simplexml php【英文标题】:xml find nodes parent and delete simplexml php 【发布时间】:2014-04-04 10:48:48 【问题描述】:

如何在xml中删除带有php的父节点并保存更改

我的尝试

<element>
    <feed id=" 9 ">
        <title>test</title>
        <table>feeds</table>
        <link/>
        <feed_type>API</feed_type>
        <affiliate/>
        <mwst>ja</mwst>
        <tld>DE</tld>
        <query/>
    </feed>
</element>
public function deleteNode($feed_id)

    //find feed on attribute ID
    $node = $this->xml->xpath('//feed[@id =' . $feed_id . ' ]');
    //find the parent and delete thenode
    $element = $node[0]->xpath('parent::*');
    // ??unset($element[0]);
    $this->xml->asXML(SITE_ROOT . '/xml/feed_config.xml');
    exit();

【问题讨论】:

可以使用SimpleXml删除节点,见***.com/questions/13002313/… 【参考方案1】:

编辑 #1:

(感谢@michi 指出unset 足以删除SimpleXML 中的一个节点)

如果你想删除&lt;element&gt;,而不是我之前想的&lt;feed&gt;,你可以这样做:

function deleteNode($feed_id)

    $parent=$this->xml->xpath('//*[feed[@id=" '.$feed_id.' "]]');
    unset($parent[0][0]);

Online demo (适用于 PHP>=5.2.2)


原帖

您可能需要DOM:

function deleteNode($feed_id)

    $node=$this->xml->xpath('//feed[@id=" '.$feed_id.' "]');
    $node=dom_import_simplexml($node[0]);
    $parent=$node->parentNode;
    $parent->removeChild($node);
    $this->xml=simplexml_import_dom($parent->ownerDocument);

Online demo (请注意,由于它不在演示中的类中,因此我使用 global 来进行惰性模拟。在实际代码中避免使用 global。)

【讨论】:

只是问最后一部分似乎不起作用我还有 我该如何搭车? @fefe 糟糕,我以为你想删除 &lt;feed&gt;。检查我的更新。

以上是关于xml查找节点父节点并删除simplexml php的主要内容,如果未能解决你的问题,请参考以下文章

详解SimpleXML添加_修改_删除_遍历XML节点属性

在php中使用simplexml删除节点[重复]

使用 simplexml 将 xml 节点值更新 1。是不是可以?

访问 SimpleXML 节点的 XML 属性

使用 simplexml 获取 XML 文档的根节点

删除 PHP 中的 XML 节点 [重复]