Dom4j基本使用

 Dom4j基本使用

2.1概述

Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。

   Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。

    使用Dom4j开发,需下载dom4j相应的jar文件。(http://www.dom4j.org/download.html

2.2 核心接口解读

DOM4J主要接口都在org.dom4j这个包里定义。

-Node为所有的dom4j中XML节点定义了多态行为;

-Branch为能够包含子节点的节点如XML元素(Element)和文档(Document)定义了一个公共的行为;

|-Element 定义XML 元素;

|-Document定义了XML文档;

-DocumentType定义XML DOCTYPE声明;

-Entity定义 XML entity;

-Attribute定义了XML的属性;

-ProcessingInstruction 定义 XML 处理指令;

-CharacterData是一个标识接口,标识基于字符的节点。如CDATA,Comment, Text;

|- CDATA 定义了XML CDATA 区域;

|-Text 定义XML 文本节点;

|- Comment 定义了XML注释的行为;

2.3 CRUD案例

<?xml version="1.0" encoding="UTF-8"?>
<学生列表>
	<学生 学号="001">
		<姓名>郭靖</姓名>
		<性别>男</性别>
		<年龄>25</年龄>
	</学生>
	<学生 学号="002">
		<姓名>黄蓉</姓名>
		<性别>女</性别>
		<年龄>20</年龄>
	</学生>
</学生列表>

读取节点信息

1)读取所有元素信息

@Test
	public void testRead1() throws Exception{
		//1、创建SAXReader实例
		SAXReader reader = new SAXReader();
		//2、通过read方法加载XML文档,并获得Document文档对象
		Document doc = reader.read("src/student.xml");
		//3、获得根元素
		Element e = doc.getRootElement();
		//4、遍历根元素下面所有子元素
		praseChildElement(e);
	}
	//遍历指定元素下面的所有子元素
	private void praseChildElement(Element e) {
		System.out.println(e.getName());
		//获取元素下面的所有子元素
		List<Element> cList = e.elements();
		for(Element c:cList){
			praseChildElement(c);
		}
	}

2)读取指定元素内容

	@Test
	public void testRead2() throws Exception{
		//1、创建SAXReader实例
		SAXReader reader = new SAXReader();
		//2、通过read方法加载XML文档,并获得Document文档对象
		Document doc = reader.read("src/student.xml");
		//获得第一个学生节点
		Element student = (Element) doc.getRootElement().elements("学生").get(0);
		//获得第一个学生节点下的姓名节点
		Element name = student.element("姓名");
		//获得姓名节点的内容
		System.out.println(name.getText());	
	}

3)读取属性

	@Test
	public void testRead3() throws Exception{
		//1、创建SAXReader实例
		SAXReader reader = new SAXReader();
		//2、通过read方法加载XML文档,并获得Document文档对象
		Document doc = reader.read("src/student.xml");
		//获得第一个学生节点
		Element student = (Element) doc.getRootElement().elements("学生").get(0);
		//读取第一个学生节点的学号属性
		Attribute attr = student.attribute("学号");
		//获得学号的名称和值
		System.out.println(attr.getName()+"="+attr.getValue());
	}

添加节点信息

@Test
	public void testAdd1() throws Exception{
		//1、创建SAXReader实例
		SAXReader reader = new SAXReader();
		//2、通过read方法加载XML文档,并获得Document文档对象
		Document doc = reader.read("src/student.xml");
		//获得第一个学生节点
		Element student = (Element) doc.getRootElement().elements("学生").get(0);
		//在学生节点下添加新的元素
		Element newElement = student.addElement("师傅");
		//设置元素内容
		newElement.setText("江南七怪");
		
		//将内存的XML数据写入到磁盘文件中
		//注意:如果文档中含有中文,需要设置写入的编码格式
		OutputFormat format = OutputFormat.createPrettyPrint();//有缩进的格式化输出
		format.setEncoding("utf-8");//指定XML编码
		//1、创建XMLWriter对象,指定写出的文件路径
		XMLWriter writer = new XMLWriter(new FileOutputStream(new File("src/student.xml")),format);
		//2、调用writer方法将内存内容写出
		writer.write(doc);
		//3、关闭对象,释放资源
		writer.close();
	}

修改节点信息

@Test
	public void testUpdate1() throws Exception{
		//1、创建SAXReader实例
		SAXReader reader = new SAXReader();
		//2、通过read方法加载XML文档,并获得Document文档对象
		Document doc = reader.read("src/student.xml");
		//获得第一个学生节点
		Element student = (Element) doc.getRootElement().elements("学生").get(0);
		Element age = student.element("年龄");
		//修改元素内容
		age.setText("30");
		
		//将内存的XML数据写入到磁盘文件中
		//注意:如果文档中含有中文,需要设置写入的编码格式
		OutputFormat format = OutputFormat.createPrettyPrint();//有缩进的格式化输出
		format.setEncoding("utf-8");//指定XML编码
		//1、创建XMLWriter对象,指定写出的文件路径
		XMLWriter writer = new XMLWriter(new FileOutputStream(new File("src/student.xml")),format);
		//2、调用writer方法将内存内容写出
		writer.write(doc);
		//3、关闭对象,释放资源
		writer.close();
	}

删除节点信息

@Test
	public void testDelete1() throws Exception{
		//1、创建SAXReader实例
		SAXReader reader = new SAXReader();
		//2、通过read方法加载XML文档,并获得Document文档对象
		Document doc = reader.read("src/student.xml");
		//获得第一个学生节点
		Element student = (Element) doc.getRootElement().elements("学生").get(0);
		student.detach();//删除元素
		
		//将内存的XML数据写入到磁盘文件中
		//注意:如果文档中含有中文,需要设置写入的编码格式
		OutputFormat format = OutputFormat.createPrettyPrint();//有缩进的格式化输出
		format.setEncoding("utf-8");//指定XML编码
		//1、创建XMLWriter对象,指定写出的文件路径
		XMLWriter writer = new XMLWriter(new FileOutputStream(new File("src/student.xml")),format);
		//2、调用writer方法将内存内容写出
		writer.write(doc);
		//3、关闭对象,释放资源
		writer.close();
	}

猜你喜欢

转载自blog.csdn.net/sinat_32366329/article/details/80211113