xml查找节点parent并删除simplexml php

时间:2014-04-04 10:48:48

标签: php xml simplexml xmlnode

如何使用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();
}

1 个答案:

答案 0 :(得分:0)

修改#1:

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

如果你想删除<element>,而不是我之前想到的<feed>,你可以这样做:

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

Online demo
(适用于PHP&gt; = 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。)