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

相关文章

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W