使用XPath和PHP删除XML中的节点
发布时间:2020-12-13 16:58:12 所属栏目:PHP教程 来源:网络整理
导读:我有一个 XML: root level name="main" level name="sub_1" content id="abc123" / /level /level/root 我想搜索id为abc123的节点并删除 content及其父级 level 所以最终的结果是: root level name="main" /level /root 我在PHP中试过没有结果,我做错了什
我有一个
XML:
<root> <level name="main"> <level name="sub_1"> <content id="abc123" /> </level> </level> </root> 我想搜索id为abc123的节点并删除< content>及其父级< level> 所以最终的结果是: <root> <level name="main"> </level> </root> 我在PHP中试过没有结果,我做错了什么? $doc = new DOMDocument; $doc->loadxml($xml_from_file); $xpath = new DOMXPath($doc); $node_list = $xpath->query("content[@id='abc123']/parent::*"); $node = $node_list->item(0); $doc->removeChild($node); 解决方法
以下是您的来源的两个问题.
表达式仅匹配子节点.你需要用//来匹配任何node:// content [@ id =’abc123′] / parent :: *. 找到的节点不是文档的子节点,因此您需要将其从其父节点中删除:$node-> parentNode-> removeChild($node);. 如果节点不存在,我建议使用foreach来避免问题. $document = new DOMDocument; $document->loadxml($xmlString); $xpath = new DOMXPath($document); foreach ($xpath->evaluate("//content[@id='abc123']/parent::*") as $node) { $node->parentNode->removeChild($node); } echo $document->saveXml(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读