我有几个使用SimpleXML访问的具有不同属性的相同元素:
<data> <seg id="A1"/> <seg id="A5"/> <seg id="A12"/> <seg id="A29"/> <seg id="A30"/> </data>
我需要删除ID为“ A12” 的特定 seg 元素,该怎么做?我尝试遍历 seg 元素并未 设置 特定的元素,但这不起作用,元素仍然存在。
foreach($doc->seg as $seg) { if($seg['id'] == 'A12') { unset($seg); } }
尽管SimpleXML提供了一种删除XML节点的方法,但其修改功能还是受到一定限制。另一种解决方案是使用DOM扩展。dom_import_simplexml()将帮助您将转换SimpleXMLElement为DOMElement。
SimpleXMLElement
DOMElement
只是一些示例代码(经过PHP 5.2.5测试):
$data='<data> <seg id="A1"/> <seg id="A5"/> <seg id="A12"/> <seg id="A29"/> <seg id="A30"/> </data>'; $doc=new SimpleXMLElement($data); foreach($doc->seg as $seg) { if($seg['id'] == 'A12') { $dom=dom_import_simplexml($seg); $dom->parentNode->removeChild($dom); } } echo $doc->asXml();
输出
<?xml version="1.0"?> <data><seg id="A1"/><seg id="A5"/><seg id="A29"/><seg id="A30"/></data>
顺便说一句:使用XPath(SimpleXMLElement->xpath)时,选择特定节点要简单得多:
$segs=$doc->xpath('//seq[@id="A12"]'); if (count($segs)>=1) { $seg=$segs[0]; } // same deletion procedure as above