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();
}
}