PHP DOM操作xml文档,删除一个,遍历删除所有(注意不能一边遍历一边删除)

2024-03-24 09:58

本文主要是介绍PHP DOM操作xml文档,删除一个,遍历删除所有(注意不能一边遍历一边删除),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

<?php
//[需求1]:删除第二本书的year节点
$dom = new DOMDocument('1.0','utf-8');
$dom->load('bookstore.xml');
//找到第二本书的year元素
$year = $dom->getElementsByTagName('year')->item(1);
$year->parentNode->removeChild($year);   //通过父结点来删除
$dom->save('dom_delete1_book.xml');
dom_delete2.php(循环遍历删除所有,注意有陷阱(删除会导致更新文档,不能一边遍历一边删除)):
<?php
//[需求1]:删除所有书籍的year节点
$dom = new DOMDocument('1.0','utf-8');
$dom->load('bookstore1.xml');
//找到所有书的year元素
$years = $dom->getElementsByTagName('year');//循环删除
/*一边遍历一边删除会出错(隔行删除)。原因:删除的时候会导致更新整个文档,然后继续遍历的时候就会出错。
foreach ($years as $year) {
//读取year节点下的子节点值做相应判断$source = $year->getElementsByTagName("source")->item(0)->nodeValue; //读取节点值,source$translations = $year->getElementsByTagName("translation")->item(0)->attributes->item(0)->nodeValue; //节点属性值 type$translation = $year->getElementsByTagName("translation")->item(0)->nodeValue;// 读取节点值,translation
if($source ==XXXXXX){$temp[] = $year;  //删除后更新文档,并不会影响temp[]。}
}*///先遍历 保存。(不能一边遍历一边删除)
$temp = array();
foreach ($years as $year) {//读取year节点下的子节点值做相应判断$source = $year->getElementsByTagName("source")->item(0)->nodeValue; //读取节点值,source$translations = $year->getElementsByTagName("translation")->item(0)->attributes->item(0)->nodeValue; //节点属性值 type$translation = $year->getElementsByTagName("translation")->item(0)->nodeValue;// 读取节点值,translation
$num=$year->getElementsByTagName("location")->length;//获得location节点的个数
if($source ==XXXXXX){$temp[] = $year;  //删除后更新文档,并不会影响temp[]。}}
//再循环删除
foreach ($temp as $v) {$v->parentNode->removeChild($v);
}
$dom->save('dom_delete2_book.xml'); 
?>

这篇关于PHP DOM操作xml文档,删除一个,遍历删除所有(注意不能一边遍历一边删除)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/841250

相关文章

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

Java Multimap实现类与操作的具体示例

《JavaMultimap实现类与操作的具体示例》Multimap出现在Google的Guava库中,它为Java提供了更加灵活的集合操作,:本文主要介绍JavaMultimap实现类与操作的... 目录一、Multimap 概述Multimap 主要特点:二、Multimap 实现类1. ListMult

C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式

《C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式》Markdown凭借简洁的语法、优良的可读性,以及对版本控制系统的高度兼容性,逐渐成为最受欢迎的文档格式... 目录为什么要将文档转换为 Markdown 格式使用工具将 Word 文档转换为 Markdown(.