DOM4j
文档: dom4j.github.io/javadoc/1.6…
本地文档: dom4j-1.6.1docsindex.html
XML 解析技术原理
XML 解析技术介绍
● 早期 JDK 为我们提供了两种 xml 解析技术 DOM 和 Sax 简介
● 第三方的 XML 解析技术
DOM4J 介绍
DOM4j 中,获得 Document 对象的方式有三种
● 开发 dom4j 要导入 dom4j 的包
1、读取 XML 文件,获得 document 对象
SAXReader reader = new SAXReader(); //创建一个解析器
Document document = reader.read(new File("src/input.xml"));//XML Document
2、解析 XML 形式的文本,得到 document 对象
String text = "";
Document document = DocumentHelper.parseText(text);
3.主动创建 document 对象.
Document document = DocumentHelper.createDocument(); //创建根节点
Element root = document.addElement("members");
DOM4j 应用实列
源码
增删改查代码
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
public class Dom4j_ {
指定读取第一个学生的信息 就是 dom4j+xpath
@Test
public void readOne() throws DocumentException {
//得到一个解析器
SAXReader reader = new SAXReader();
//代码技巧->debug 看看 document 对象的属性
//分析了 document 对象的底层结构
Document document = reader.read(new File("src/students.xml"));
//1. 得到 rootElement, 你是 OOP
Element rootElement = document.getRootElement();
//2. 获取第一个学生
Element student = (Element) rootElement.elements("student").get(1);
//3. 输出该信息
System.out.println("该学生的信息= " + student.element("name").getText() + " " +
student.element("age").getText() + " " +
student.element("resume").getText() +
student.element("gender").getText());
//4. 获取 student 元素的属性
System.out.println("id= " + student.attributeValue("id"));
}
加元素(要求: 添加一个学生到 xml 中) [不要求,使用少,了解]
@Test
public void add() throws Exception {
//1.得到解析器
SAXReader saxReader = new SAXReader();
//2.指定解析哪个 xml 文件
Document document = saxReader.read(new File("src/students.xml"));
//首先我们来创建一个学生节点对象
Element newStu = DocumentHelper.createElement("student");
Element newStu_name = DocumentHelper.createElement("name");
//如何给元素添加属性
newStu.addAttribute("id", "04");
newStu_name.setText("宋江");
//创建 age 元素
Element newStu_age = DocumentHelper.createElement("age");
newStu_age.setText("23");
//创建 resume 元素
Element newStu_intro = DocumentHelper.createElement("resume");
newStu_intro.setText("梁山老大");
//把三个子元素(节点)加到 newStu 下
newStu.add(newStu_name);
newStu.add(newStu_age);
newStu.add(newStu_intro);
//再把 newStu 节点加到根元素
document.getRootElement().add(newStu);
//直接输出会出现中文乱码:
OutputFormat output = OutputFormat.createPrettyPrint();
output.setEncoding("utf-8");//输出的编码 utf-8
//把我们的 xml 文件更新
// lets write to a file
//new FileOutputStream(new File("src/myClass.xml"))
//使用到 io 编程 FileOutputStream 就是文件字节输出流
XMLWriter writer = new XMLWriter(
new FileOutputStream(new File("src/students.xml")), output);
writer.write(document);
writer.close();
}
- //删除元素(要求:删除第一个学生) 使用少,了解
@Test
public void del() throws Exception {
//1.得到解析器
SAXReader saxReader = new SAXReader();
//2.指定解析哪个 xml 文件
Document document = saxReader.read(new File("src/students.xml"));
//找到该元素第一个学生
Element stu = (Element)
document.getRootElement().elements("student").get(2);
//删除元素
stu.getParent().remove(stu);
// //删除元素的某个属性
// stu.remove(stu.attribute("id"));
//更新 xml
//直接输出会出现中文乱码:
OutputFormat output = OutputFormat.createPrettyPrint();
韩顺平 Java 工程师
output.setEncoding("utf-8");//输出的编码 utf-8
//把我们的 xml 文件更新
XMLWriter writer = new XMLWriter(
new FileOutputStream(new File("src/students.xml")), output);
writer.write(document);
writer.close();
System.out.println("删除成功~");
}
更新元素(要求把所有学生的年龄+3) 使用少,了解
@Test
public void update() throws Exception {
//1.得到解析器
SAXReader saxReader = new SAXReader();
//2.指定解析哪个 xml 文件
Document document = saxReader.read(new File("src/students.xml"));
//得到所有学生的年龄
List students = document.getRootElement().elements("student");
//遍历, 所有的学生元素的 age+3
for (Element student : students) {
//取出年龄
Element age = student.element("age");
age.setText((Integer.parseInt(age.getText()) + 3) + "");
}
//更新
//直接输出会出现中文乱码:
OutputFormat output = OutputFormat.createPrettyPrint();
output.setEncoding("utf-8");//输出的编码 utf-8
//把我们的 xml 文件更新
XMLWriter writer = new XMLWriter(
new FileOutputStream(new File("src/students.xml")), output);
writer.write(document);
writer.close();
System.out.println("更新成功~");
}
}