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

前言:首先谈一个小故事:当年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。

时间: 2024-12-30 22:01:11

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

java-关于用poi实现对word文档的读写功能

问题描述 关于用poi实现对word文档的读写功能 探讨用poi实现对word文档的读写功能 在java语言,window系统下用poi怎么实现自动从系统中获取doc格式的文件并读取其中数据, 用户在页面填入数据后,点击设定好的按钮会自动把部分数据插入到抓取到的word文档中并生成一个新的word文档,在生成新的文档时弹出对话框,用户选择要保存的位置. 由于操作word文档的学习文件实在太少,有知道的大神还请指教!急! 解决方案 问题补充:这次项目并不需要读取含有图片的文档,不过如果有知道关于有

rsa-用java怎么实现对word文档进行签名并将签名追加到文档里?(数字签名)

问题描述 用java怎么实现对word文档进行签名并将签名追加到文档里?(数字签名) 计算摘要值用MD5算法,签名用RSA算法. 我想实现对word文档实施签名,并将签名追加到文档的尾部.

asp.net web开发中实现对office文档(word、excel)进行网页内编辑

问题描述 asp.netweb开发中实现对office文档(word.excel)进行网页内编辑,希望能给出具体实例源码,不甚感谢! 解决方案 解决方案二:顶一下解决方案三:用控件www.ntko.com*****************************************************************************欢迎使用CSDN论坛专用阅读器:CSDNReader(附全部源代码)http://www.cnblogs.com/feiyun0112/arc

C#调用Permission实现对office文档权限设置

问题描述 C#调用Permission实现对office文档权限设置 C#添加Microsoft.Office.Core组件,调用Permission实现对office文档权限设置,调用permission.Add(string userid, property, expirationTime)时,expirationTime设置无效,格式为: object expirationTime; DateTime testtime=DateTime.ParseExact("2015/12/26&quo

Struts2实现CRUD(增 删 改 查)功能实例代码_java

CRUD是Create(创建).Read(读取).Update(更新)和Delete(删除)的缩写,它是普通应用程序的缩影.如果您掌握了某框架的CRUD编写,那么意味可以使用该框架创建普通应用程序了,所以大家使用新框架开发OLTP(Online Transaction Processing)应用程序时,首先会研究一下如何编写CRUD.这类似于大家在学习新编程语言时喜欢编写"Hello World". 本文旨在讲述Struts 2上的CRUD开发,所以为了例子的简单易懂,我不会花时间在数

简单的php数据库操作类代码(增,删,改,查)_php实例

数据库操纵基本流程为: 1.连接数据库服务器 2.选择数据库 3.执行SQL语句 4.处理结果集 5.打印操作信息 其中用到的相关函数有 •resource mysql_connect ( [string server [, string username [, string password [, bool new_link [, int client_flags]]]]] ) 连接数据库服务器•resource mysql_pconnect ( [string server [, strin

简单的增 删 改 查

一:insert语句into 关键字是可选的values关键字前面的()是可选的,这里是要接收数据的列values后面,有两种方式提供值1:显式的给出值  2:从select语句中导出值 insert语句注意几点1:不要理标志列,系统会给你插入的2:给出实际的值,如果没有,那就null3:给出默认的值,default关键字,告诉数据库取默认值 insert into ... select什么时候会这么用,当成批的数据来自1:数据库中的另一个表2:同一台服务器完全不同的数据库3:另一个SQLSER

VC++中利用MSXML解析XML文档

c++|xml 四.程序实现 下面通过一个具体的实例来说明在VC++中如何利用MSXML解析XML文档. (1)源XML文档(xmlfile.xml)如下: <?xml version="1.0" encoding="GB2312"?> <Device id="10041" name="设备1"> <Type>13</Type> <TypeName>保护</Ty

winform中实现xml文档显示、编辑

问题描述 在winform中实现对xml文档编辑,导入xml文档,并在文本框中显示,保留xml文档格式,可在光标位置插入想要内容.编辑文本框要使用什么控件? 解决方案