XML解析之DOM4J的增删改查

DOM4J介绍

DOM4J是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点。
其优点: DOM4J使Java开发的灵活性和XML解析代码易于维护。它是轻量级的,快速的API。
使用Dom4j开发,需下载dom4j相应的jar文件。官网DOM4J的jar文件下载地址 笔者也在这里提供网盘下载地址:密码:g7jq
以下是参考网上教程以及百度百科得到的总结!百度百科对DOM4J的简介以及使用示例

常用类

  • Document 表示整个XML文档。文档Document对象是通常被称为DOM树。
  • Element 表示一个XML元素。 Element对象有方法来操作其子元素,它的文本,属性和名称空间。
  • Attribute 表示元素的属性。属性有方法来获取和设置属性的值。它有父节点和属性类型。

常用方法

xmlWriter.write(doc);将Document对象中的各个元素属性写入到xml文件中
Attribute接口的方法
getName:获取属性的名字,其实是继承其父接口Node的方法
getValue:获取属性的值

OutputFormat类
创建输出格式和xml编码
OutputFormat createPrettyPrint();//输出漂亮的格式

个人认为代码中方法基本满足初学者的需求,而且比较常用,方法的作用都有注解。只有在敲代码的过程中才能更好的理解和掌握这些方法。要想掌握更多的方法,可以在网上搜DOM4J的API文档。

1、新建XML文件,用于增删查改

<?xml version="1.0" encoding="UTF-8"?>

<Teachers> 
  <teacher id="1"> 
    <name>张三</name>  
    <age>22</age>  
    <address>合肥</address> 
  </teacher> 
</Teachers>

2、定义加载xml文件的方法

    //Document doc =null;
	public void load() {
		try {
		   //创建SAXReader对象,用于读取xml文件
			SAXReader reader = new SAXReader();
			//通过read()方法将读取的xml文件转换为Document对象
			Document doc = reader.read("Teacher.xml");//此处建议将doc定义为全局变量
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

3、 显示xml文件信息(查)

/ 1、显示xml文件中的信息
	public void show() {
		// 1、获取根元素(Teachers)
		Element root = doc.getRootElement();
		// 2、利用迭代器获取子元素
		Iterator<Element> it = root.elementIterator();
		while (it.hasNext()) {
			// 3、获取子元素(teacher)
			Element teacher = it.next();
			// 4、获取子元素的属性(id)
			Attribute id = teacher.attribute("id");
			System.out.println(id.getName() + "--" + id.getValue());
			//5、获取name元素 、age元素、address元素
			Element name = teacher.element("name");
			Element age = teacher.element("age");
			Element address = teacher.element("address");
			System.out.println(name.getName() + "--" + name.getText());
			//getText()方法是为了获取文本信息
			System.out.println(age.getName() + "--" + age.getText());
			System.out.println(address.getName() + "--" + address.getText());
		}
	}

4、添加元素

public void add() {
		//	1、获取根元素
		Element root = doc.getRootElement();
		//2、为根元素添加一个属性(id="2")的子元素
		Element teacher = root.addElement("teacher").addAttribute("id", "2");
		//3、为子元素(teacher)添加子元素(name、age、address)
		Element name = teacher.addElement("name");
		//4、为子元素(name)添加文本
		name.addText("李四");
		Element age = teacher.addElement("age");
		age.addText("23");
		Element address = teacher.addElement("address");
		address.addText("安徽合肥");
		save();//调用保存方法,将添加在内存中的数据写入到xml文件中
	}

5、修改

public void update() {
		Element root = doc.getRootElement();
		Iterator<Element> it = root.elementIterator();
		while (it.hasNext()) {
			Element teacher = it.next();
			// String id = teacher.attributeValue("id");
			// System.out.println(id);
			if (teacher.attributeValue("id").equals("2")) {
				teacher.element("name").setText("王五");
				break;
			}
		}
		save();
	}

6、删除

public void delete() {
		Element root = doc.getRootElement();
		Iterator<Element> it = root.elementIterator();
		while (it.hasNext()) {
			Element teacher = it.next();
			if (teacher.attributeValue("id").equals("2")) {
				root.remove(teacher);
				break;
			}
		}
		save();
//		show();

	}

7、保存

public void save() {
		OutputFormat format = OutputFormat.createPrettyPrint();
		format.setEncoding("UTF-8");//设置编码字符集
		XMLWriter xmlWriter = null;
		try {
			xmlWriter = new XMLWriter(new FileWriter("Teacher.xml"), format);
			xmlWriter.write(doc);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (xmlWriter != null)
					xmlWriter.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

8、 总代码

package com.zyh.day01.test;

import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;

public class XMLTest {
	Document doc = null;

	// 加载xml文件,获取Document对象
	public void load() {
		try {
			SAXReader reader = new SAXReader();
			doc = reader.read("Teacher.xml");
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	// 1、显示xml文件中的信息
	public void show() {
		// 1、获取根元素
		Element root = doc.getRootElement();
		// 2、利用迭代器获取子元素
		Iterator<Element> it = root.elementIterator();
		while (it.hasNext()) {
			// 3、获取子元素
			Element teacher = it.next();
			// 4、获取子元素的属性
			Attribute id = teacher.attribute("id");

			System.out.println(id.getName() + "--" + id.getValue());
			Element name = teacher.element("name");
			Element age = teacher.element("age");
			Element address = teacher.element("address");
			System.out.println(name.getName() + "--" + name.getText());
			System.out.println(age.getName() + "--" + age.getText());
			System.out.println(address.getName() + "--" + address.getText());
		}
	}

	// 2、添加方法
	public void add() {
		Element root = doc.getRootElement();
		Element teacher = root.addElement("teacher").addAttribute("id", "2");
		Element name = teacher.addElement("name");
		name.addText("李四");
		Element age = teacher.addElement("age");
		age.addText("23");
		Element address = teacher.addElement("address");
		address.addText("安徽合肥");
		save();
	}

	// 3、修改xml元素信息方法
	public void update() {
		Element root = doc.getRootElement();
		Iterator<Element> it = root.elementIterator();
		while (it.hasNext()) {
			Element teacher = it.next();
			// String id = teacher.attributeValue("id");
			// System.out.println(id);
			if (teacher.attributeValue("id").equals("2")) {
				teacher.element("name").setText("王五");
				break;
			}
		}
		save();
	}

	// 4、删除方法
	public void delete() {
		Element root = doc.getRootElement();
		Iterator<Element> it = root.elementIterator();
		while (it.hasNext()) {
			Element teacher = it.next();
			if (teacher.attributeValue("id").equals("2")) {
				root.remove(teacher);
				break;
			}
		}
		save();
//		show();

	}

	// 5、保存方法
	public void save() {
		OutputFormat format = OutputFormat.createPrettyPrint();
		format.setEncoding("UTF-8");
		XMLWriter xmlWriter = null;
		try {
			xmlWriter = new XMLWriter(new FileWriter("Teacher.xml"), format);
			xmlWriter.write(doc);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (xmlWriter != null)
					xmlWriter.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	// 1、读取xml文件中的数据
	@Test
	public void test1() {
		XMLTest test = new XMLTest();
		test.load();
		test.delete();
//		test.update();
//		 test.show();
//		 test.add();

	}

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值