DOM4J 实现对XML文档的增、删、改、查

简介: 前言:首先谈一个小故事:当年Java准备做对XML的解析时,对解析器的实现方向在内部发生了争执,后来高层没有听从工程师建议,坚持开发出了JDOM,而主要的工程师选择离开Java 按照自己的方式实现,就是DOM4J 。后来结果表明,DOM4J 完胜了JDOM。下面,让我们来了解一下通过DOM4J 实现对XML文件进行增删改查的过程。 1、待解析的XML文件: <span styl

前言:首先谈一个小故事:当年Java准备做对XML的解析时,对解析器的实现方向在内部发生了争执,后来高层没有听从工程师建议,坚持开发出了JDOM,而主要的工程师选择离开Java 按照自己的方式实现,就是DOM4J 。后来结果表明,DOM4J 完胜了JDOM。下面,让我们来了解一下通过DOM4J 实现对XML文件进行增删改查的过程。

1、待解析的XML文件:

<span style="font-size:14px;">
<?xml version="1.0" encoding="utf-8"?>

<students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xmlns="http://www.itcast.cn/xml"
			xsi:schemaLocation="http://www.itcast.cn/xml students.xsd">
	<student number="ITCAST_1001">
	  <name>zhangSan</name>
	  <age>23</age>
	  <sex>male</sex>
	</student>
</students>

</span>

2、用DOM4J实现增删改查:
<span style="font-size:14px;">
public class Demo3 {

	@Test
	public void method1() throws Exception {
		// 创建解析器
		SAXReader reader = new SAXReader();//这个是用来读取文件内容的
		Document doc = reader.read(new File("students.xml")); //指定要读取的文件
		//System.out.println(doc.asXML()); //打印出文件
	}
	
	//实现对XML文件的复制
	@Test
	public void method2() throws Exception {
		// 得到Document
		SAXReader reader = new SAXReader();
		Document doc = reader.read(new File("students.xml"));
		
		// 保存Document,指定将写入的目的文件(复制功能)
		XMLWriter writer = new XMLWriter(new FileOutputStream("students_copy.xml"));
		writer.write(doc); //开始写入
	}
	
	//遍历Document
	@Test
	public void method3() throws Exception {
		// 要遍历文档,首先要得到Document对象
		SAXReader reader = new SAXReader();
		Document doc = reader.read(new File("students.xml"));

		//获取根元素
		Element root = doc.getRootElement();
		//获取根元素中所有student元素
		List<Element> stuEleList = root.elements("student");
		// 循环遍历所有学生元素
		for(Element stuEle : stuEleList) {
			//获取学生元素的number
			String number = stuEle.attributeValue("number");
			//获取学生元素名为name的子元素的文本内容
			String name = stuEle.elementText("name");
			//获取学生元素名为age的子元素的文本内容
			String age = stuEle.elementText("age");
			//获取学生元素名为sex的子元素的文本内容
			String sex = stuEle.elementText("sex");		
			System.out.println(number + ", " + name + ", " + age + ", " + sex);
		}
	}
	
	//添加元素
	@Test
	public void method4() throws Exception {
		// 得到Document
		SAXReader reader = new SAXReader();
		Document doc = reader.read(new File("src/students.xml"));

		//获取root元素
		Element root = doc.getRootElement();
		Element stuEle = root.addElement("student"); //添加了student元素
		// 给stuEle添加属性,名为number,值为1003
		stuEle.addAttribute("number", "1003"); 
		// 分别为stuEle添加名为name、age、sex的子元素,并为子元素设置文本内容
		stuEle.addElement("name").setText("wangWu");
		stuEle.addElement("age").setText("18");
		stuEle.addElement("sex").setText("male");
		
		// 设置保存的格式化器  1. \t,使用什么来完成缩进 2. true, 是否要添加换行
		OutputFormat format = new OutputFormat("\t", true);
		format.setTrimText(true); //去掉空白
		// 在创建Writer时,指定格式化器
		XMLWriter writer = new XMLWriter(new FileOutputStream("src/students_copy.xml"), format);
		writer.write(doc);
	}
	
	//修改元素
	@Test
	public void method5() throws Exception {

		// 得到Document
		SAXReader reader = new SAXReader();
		Document doc = reader.read(new File("src/students_copy.xml"));

		//使用XPath找到符合条件的元素
		// 查询student元素,条件是number属性的值为1003
		Element stuEle = (Element) doc.selectSingleNode("//student[@number='ITCAST_1003']");
		//修改stuEle的age子元素内容为81
		stuEle.element("age").setText("81");
		//修改stuEle的sex子元素的内容为female
		stuEle.element("sex").setText("female");

	}
	
	//删除元素
	@Test
	public void method6() throws Exception {

		// 得到Document
		SAXReader reader = new SAXReader();
		Document doc = reader.read(new File("src/students_copy.xml"));
		
		// 查找student元素,条件是name子元素的文本内容为wangWu
		Element stuEle = (Element) doc.selectSingleNode("//student[name='wangWu']");
		
		// 2. 获取父元素,使用父元素删除指定子元素
		stuEle.getParent().remove(stuEle);
	}
}
 </span>
  小结:DOM4J无论在那个方面都是非常出色的。如今越来越多的Java软件在使用DOM4J来读写XML,例如Hibernate,包括sun公司自己的JAXM也用了DOM4J。



目录
相关文章
|
5月前
|
XML 数据采集 存储
使用Java和XPath在XML文档中精准定位数据
在数据驱动的时代,从复杂结构中精确提取信息至关重要。XML被广泛用于数据存储与传输,而XPath则能高效地在这些文档中导航和提取数据。本文深入探讨如何使用Java和XPath精准定位XML文档中的数据,并通过小红书的实际案例进行分析。首先介绍了XML及其挑战,接着阐述了XPath的优势。然后,提出从大型XML文档中自动提取特定产品信息的需求,并通过代理IP技术、设置Cookie和User-Agent以及多线程技术来解决实际网络环境下的数据抓取问题。最后,提供了一个Java示例代码,演示如何集成这些技术以高效地从XML源中抓取数据。
216 7
使用Java和XPath在XML文档中精准定位数据
|
5月前
|
XML JavaScript Java
【JAVA XML 探秘】DOM、SAX、StAX:揭秘 Java 中 XML 解析技术的终极指南!
【8月更文挑战第25天】本文详细探讨了Java中三种主流的XML解析技术:DOM、SAX与StAX。DOM将XML文档转换为树状结构,便于全方位访问和修改;SAX采取事件驱动模式,适用于大型文件的顺序处理;StAX则兼具DOM和SAX的优点,支持流式处理和随机访问。文中提供了每种技术的示例代码,帮助读者理解如何在实际项目中应用这些解析方法。
247 1
|
6月前
|
XML JavaScript 数据格式
XML DOM 浏览器差异
所有 modern browsers 支持 W3C DOM 规范, 但仍存在差异, 主要是处理空白和换行的不同。例如, 在 XML 中, Internet Explorer 不会将空白或换行视为文本节点, 而其他浏览器则会。这会导致相同的 XML 文档在 IE 中的子节点数为 4, 而在其他浏览器中为 9:
|
3月前
|
XML 编解码 JavaScript
DOM(文档对象模型)和 BOM(浏览器对象模型)
【10月更文挑战第19天】在前端开发中,理解 DOM(文档对象模型)和 BOM(浏览器对象模型)是至关重要的。它们是 Web 开发的基础,为我们提供了与网页文档和浏览器进行交互的能力。
|
5月前
|
JavaScript 前端开发
js之DOM 文档对象模型
js之DOM 文档对象模型
35 1
js之DOM 文档对象模型
|
6月前
|
XML JavaScript 数据格式
XML DOM 浏览器差异
输出子节点的数量。结果取决于您所使用的浏览器。IE 浏览器会输出 4(提醒 4 个子节点),而其他浏览器会输出 9(提醒 9 个子节点)。
|
6月前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
遍历(Traverse)意味着在节点树中进行循环或移动。
|
6月前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
遍历(Traverse)意味着在节点树中进行循环或移动。
|
6月前
|
XML 存储 JavaScript
XML DOM - 访问节点
通过 DOM, 可全面访问 XML 文档的节点。实现这一目标有 3 种方法: - 使用 `getElementsByTagName()` 方法, - 循环遍历节点树, - 利用节点间关系进行导航。 `getElementsByTagName()` 返回一个 Node List,即一种节点数组形式。示例代码通过 `loadXMLDoc()` 函数加载 &quot;books.xml&quot; 文件到 `xmlDoc` 变量中,并随后在变量 `x` 中保存所需节点信息。
|
6月前
|
XML Web App开发 JavaScript
XML DOM 解析器
大多数浏览器内置了XML解析器,能将XML文档转换为可由JavaScript操作的XML DOM对象。DOM接口允许遍历XML树并支持节点的访问、插入与删除。加载XML文档需先创建XMLHTTP对象,然后打开并发送请求给服务器,最后将响应设置为XML DOM对象以供后续处理。