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

相关文章

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

一文解析C#中的StringSplitOptions枚举

《一文解析C#中的StringSplitOptions枚举》StringSplitOptions是C#中的一个枚举类型,用于控制string.Split()方法分割字符串时的行为,核心作用是处理分割后... 目录C#的StringSplitOptions枚举1.StringSplitOptions枚举的常用

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

MyBatis延迟加载与多级缓存全解析

《MyBatis延迟加载与多级缓存全解析》文章介绍MyBatis的延迟加载与多级缓存机制,延迟加载按需加载关联数据提升性能,一级缓存会话级默认开启,二级缓存工厂级支持跨会话共享,增删改操作会清空对应缓... 目录MyBATis延迟加载策略一对多示例一对多示例MyBatis框架的缓存一级缓存二级缓存MyBat

前端缓存策略的自解方案全解析

《前端缓存策略的自解方案全解析》缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,:本文主要介绍前端缓存的自解方案,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、为什么“清缓存”成了技术圈的梗二、先给缓存“把个脉”:浏览器到底缓存了谁?三、设计思路:把“发版”做成“自愈”四、代码

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

vue监听属性watch的用法及使用场景详解

《vue监听属性watch的用法及使用场景详解》watch是vue中常用的监听器,它主要用于侦听数据的变化,在数据发生变化的时候执行一些操作,:本文主要介绍vue监听属性watch的用法及使用场景... 目录1. 监听属性 watch2. 常规用法3. 监听对象和route变化4. 使用场景附Watch 的