DOM解析XML文件(修改属性,增加节点)

2024-08-30 19:48

本文主要是介绍DOM解析XML文件(修改属性,增加节点),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前面用DOM解析XML只是对里面的数据读取出来,而DOM解析最大的优势并不是读取,而是可以方便的修改里面的元素。

接着上回的代码,在类中新建一个方法来进行XML文件的修改和增加节点操作。

DOM修改的原理是,DOM在读取XML文件时读入的是文件中所有的节点组成一个DOM树的Document文件,这个文件被读取出来之后我们用JAVA语言可以操作它,不过这样修改也仅仅是修改了JAVA中的这个对象而已,所有在我们将DOM文件修改完了之后还要进行保存工作,这样才是真正的做到了修改XML文件。

原来的XML文档:

<?xml version="1.0" encoding="utf-8"?>
<student><stu num="1111"><name>张三丰</name><sex>男</sex><cla>武当</cla></stu><stu num="2345"><name>小龙女</name><sex>女</sex><cla>古墓</cla></stu></student>

 

代码:

/*** 修改XML文件* @throws Exception */public static void changeXML(Document doc) throws Exception{//------------------------修改节点中元素的内容//找到要修改的节点名称的所有节点,得到名字相同的节点队列NodeList nodes = doc.getElementsByTagName("name");//在队列中选择要修改的节点Node n = nodes.item(0);//修改该节点的文本n.setTextContent("逗逼");//------------------------增加节点的子元素//找到要修改的节点名称的所有节点,得到名字相同的节点队列NodeList nodes1 = doc.getElementsByTagName("student");//在队列中选择要修改的节点Node n1 = nodes1.item(0);//创建要增加的节点元素Element nn = doc.createElement("stu");//设置节点属性Attr attr = doc.createAttribute("num");attr.setValue("6666");nn.setAttributeNode(attr);//增加新元素stu的子元素//姓名Element nn1 = doc.createElement("name");nn1.setTextContent("第三个");nn.appendChild(nn1);n1.appendChild(nn);//性别Element nn2 = doc.createElement("sex");nn2.setTextContent("第三个");nn.appendChild(nn2);n1.appendChild(nn);//班级Element nn3 = doc.createElement("cla");nn3.setTextContent("第三个");nn.appendChild(nn3);n1.appendChild(nn);System.out.println(doc.getElementsByTagName("stu").getLength());//-------------------------保存到文件中//创建一个用来转换DOM对象的工厂对象TransformerFactory factory = TransformerFactory.newInstance();//获得转换器对象Transformer t = factory.newTransformer();//定义要转换的源对象DOMSource xml = new DOMSource(doc);//定义要转换到的目标文件StreamResult s = new StreamResult(new File("D:\\xmlEX\\student4.xml"));//开始转换t.transform(xml, s);}

修改后的XML文档:

<?xml version="1.0" encoding="utf-8" standalone="no"?><student><stu num="1111"><name>逗逼</name><sex>男</sex><cla>武当</cla></stu><stu num="2345"><name>小龙女</name><sex>女</sex><cla>古墓</cla></stu><stu num="6666"><name>第三个</name><sex>第三个</sex><cla>第三个</cla></stu>
</student>

  

从这次的练习得出一个发现,如果直接给一个节点添加一个子节点stu,而且该子节点stu没有其他的子节点的话,那么这个stu在XML保存操作之后,会在文件中显示成<stu/>,只有当这个节点stu有子节点的时候,才会显示成<stu></stu>的两对尖括号的形式.....

这篇关于DOM解析XML文件(修改属性,增加节点)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

全面解析Golang 中的 Gorilla CORS 中间件正确用法

《全面解析Golang中的GorillaCORS中间件正确用法》Golang中使用gorilla/mux路由器配合rs/cors中间件库可以优雅地解决这个问题,然而,很多人刚开始使用时会遇到配... 目录如何让 golang 中的 Gorilla CORS 中间件正确工作一、基础依赖二、错误用法(很多人一开

Mysql中设计数据表的过程解析

《Mysql中设计数据表的过程解析》数据库约束通过NOTNULL、UNIQUE、DEFAULT、主键和外键等规则保障数据完整性,自动校验数据,减少人工错误,提升数据一致性和业务逻辑严谨性,本文介绍My... 目录1.引言2.NOT NULL——制定某列不可以存储NULL值2.UNIQUE——保证某一列的每一

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

MySQL CTE (Common Table Expressions)示例全解析

《MySQLCTE(CommonTableExpressions)示例全解析》MySQL8.0引入CTE,支持递归查询,可创建临时命名结果集,提升复杂查询的可读性与维护性,适用于层次结构数据处... 目录基本语法CTE 主要特点非递归 CTE简单 CTE 示例多 CTE 示例递归 CTE基本递归 CTE 结

Spring Boot 3.x 中 WebClient 示例详解析

《SpringBoot3.x中WebClient示例详解析》SpringBoot3.x中WebClient是响应式HTTP客户端,替代RestTemplate,支持异步非阻塞请求,涵盖GET... 目录Spring Boot 3.x 中 WebClient 全面详解及示例1. WebClient 简介2.

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

Spring Boot3.0新特性全面解析与应用实战

《SpringBoot3.0新特性全面解析与应用实战》SpringBoot3.0作为Spring生态系统的一个重要里程碑,带来了众多令人兴奋的新特性和改进,本文将深入解析SpringBoot3.0的... 目录核心变化概览Java版本要求提升迁移至Jakarta EE重要新特性详解1. Native Ima

spring中的@MapperScan注解属性解析

《spring中的@MapperScan注解属性解析》@MapperScan是Spring集成MyBatis时自动扫描Mapper接口的注解,简化配置并支持多数据源,通过属性控制扫描路径和过滤条件,利... 目录一、核心功能与作用二、注解属性解析三、底层实现原理四、使用场景与最佳实践五、注意事项与常见问题六

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应