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 中的一个节点)
如果你想删除<element>
,而不是我之前想的<feed>
,你可以这样做:
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
。)
【讨论】:
只是问最后一部分似乎不起作用我还有<feed>
。检查我的更新。以上是关于xml查找节点父节点并删除simplexml php的主要内容,如果未能解决你的问题,请参考以下文章