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