Remove multiple sibling nodes from XML document with PHP SimpleXML(用PHP SimpleXML从XML文档中移除多个兄弟节点)
本文介绍了用PHP SimpleXML从XML文档中移除多个兄弟节点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我得到了一个相当复杂的XML文档,其中需要使用PHP/SimpleXML删除特定节点。我不确定我会在文件中找到它们的深度。
其工作原理如下: 用户插入了几个我需要删除的元素的ID。(这些ID指的是属性。)以下是一个简化的示例XML文件:
<?xml version="1.0"?>
<root>
<firstlayer>
<secondlayer>
<thirdlayer>
<element id="1"/>
<element id="2"/>
<element id="3"/>
</thirdlayer>
<thirdlayer>
<element id="4"/>
<element id="5"/>
</thirdlayer>
</secondlayer>
</firstlayer>
</root>
我不知道当我必须删除这些元素时它们会在哪里,所以我编写了一个遍历XML文档的递归函数:
function traverseNodes($node) {
foreach($node->children() as $child) {
if($child->getName()=="element") {
// Code for finding out if node has to be deleted
if(deleteMe) {
$dom = dom_import_simplexml($child);
$dom->parentNode->removeChild($dom);
} else {
traverseNodes($child); // visit the children
}
}
else {
// do some other stuff with the rest of the nodes
// and recursively call the function
}
}
}
该函数从根节点开始,访问所有子节点。当它遇到必须删除的节点时,它会使用DOM结构将其删除...但问题是:它只删除父节点的第一个兄弟节点。因此,当我想要从前面的XML文档中删除元素1、3和5时,它只会删除1和5(因为它们是各自父元素中第一个被删除的元素。
我不确定问题出在哪里。我已经考虑过销毁$Child对象,所以Foreach循环不能继续,但在这两行之前和之后都是一样的
$dom = dom_import_simplexml($child);
$dom->parentNode->removeChild($dom);
如有任何想法,我将不胜感激…
推荐答案
假设您的xml是$xmlString,您可以使用如下内容:
$xml = new SimpleXMLElement( $xmlString );
$ids_to_delete = array( 1, 4 );
foreach ($ids_to_delete as $id) {
$result = $xml->xpath( "//element[@id='$id']" );
foreach ( $result as $node ) {
$dom = dom_import_simplexml($node);
$dom->parentNode->removeChild($dom);
}
}
这篇关于用PHP SimpleXML从XML文档中移除多个兄弟节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:用PHP SimpleXML从XML文档中移除多个兄弟节点
猜你喜欢
- 如何使用 Google API 在团队云端硬盘中创建文件夹? 2022-01-01
- 如何在 Symfony2 中正确使用 webSockets 2021-01-01
- openssl_digest vs hash vs hash_hmac?盐与盐的区别HMAC? 2022-01-01
- PHP - if 语句中的倒序 2021-01-01
- PHP foreach() 与数组中的数组? 2022-01-01
- Laravel 5:Model.php 中的 MassAssignmentException 2021-01-01
- 如何从数据库中获取数据以在 laravel 中查看页面? 2022-01-01
- 使用 GD 和 libjpeg 支持编译 PHP 2022-01-01
- Oracle 即时客户端 DYLD_LIBRARY_PATH 错误 2022-01-01
- 覆盖 Magento 社区模块控制器的问题 2022-01-01