Java中使用dom4j解析xml文档
前段时间学习了XML(Extensible Markup Language)可扩展标记语言后
了解到了XML被设计为具有自我描述性,它的设计宗旨是传输数据,而不是显示数据
那如果我们想要获取到XML的数据内容应该怎么办呢?
于是我最近学习到了可以使用dom4j来解析XML文档并获取其中的数据
那么什么是dom4j呢?
简单来说:dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API
1. 导入jar包及创建XML文件
- 大家可以搜索dom4j从GitHub上获取到不同版本的jar包以及操作文档,由于操作文档对dom4j的书写很详尽,所以本文仅作为记录及参考所用
- 大家将对应jar包导入到项目后,首先先创建一个XML文件,如下所示:
<?xml version="1.0" encoding="UTF-8" ?>
<books>
<book sn="001">
<name>海的女儿</name>
<author>安徒生</author>
<price>0.43</price>
</book>
<book sn="002">
<name>故事新编</name>
<author>鲁迅</author>
<price>0.31</price>
</book>
</books>
2. 创建POJO类
- 创建成功后,再去创建一个对应的POJO(Plain Ordinary Java Object)简单的Java对象类,并生成无参和有参构造方法、Getter、Setter方法,重写toString方法
- 重写后可以直接调用POJO的toString()方法打印其属性值。如果不重写,直接调用Object类的toString()方法,打印的是该对象的内存地址(类名@哈希码值)
package pers.xiqingbo.pojo;
/**
* @PackageName: pers.xiqingbo.pojo
* @ClassName: Book
* @Description: 图书类
* @Author: Schieber
* @Date: 2021/1/13 上午 6:53
*/
public class Book {
private String sn;
private String name;
private String author;
private Double price;
public Book() {
}
public Book(String sn, String name, String author, Double price) {
this.sn = sn;
this.name = name;
this.author = author;
this.price = price;
}
public String getSn() {
return sn;
}
public void setSn(String sn) {
this.sn = sn;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
@Override
public String toString() {
return "Book{" +
"sn='" + sn + '\'' +
", name='" + name + '\'' +
", author='" + author + '\'' +
", price=" + price +
'}';
}
}
3. 接下来就可以创建一个新的类及方法进行解析XML文档操作:
package pers.xiqingbo.pojo;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;
import java.io.File;
import java.util.List;
/**
* @PackageName: pers.xiqingbo.pojo
* @ClassName: Dom4jTest
* @Description: 使用dom4j解析xml文档并遍历xml节点
* @Author: Schieber
* @Date: 2021/1/13 上午 7:45
*/
public class Dom4j {
@Test
public void read() throws DocumentException {
// 创建SAXReader实例
SAXReader reader = new SAXReader();
// read()读取指定的XML文档并形成DOM树
Document document = reader.read(new File("books.xml"));
// getRootElement()获取根节点
Element rootEle = document.getRootElement();
// elements()获取根节点的子节点
List<Element> bookEles = rootEle.elements();
// 遍历子节点
for (Element book : bookEles
) {
// element()获取子节点指定的子元素
Element nameElement = book.element("name");
// getText()获取子元素的文本内容
String nameText = nameElement.getText();
// elementText()直接获取元素的文本内容
String authorText = book.elementText("author");
String priceText = book.elementText("price");
// attributeValue()直接获取元素的属性值
String snValue = book.attributeValue("sn");
System.out.println(new Book(snValue, nameText, authorText, Double.parseDouble(priceText)));
}
}
}
至此就是使用dom4j简单解析XML文档的全部过程
还有创建一个新的XML文档,将文档写入文件等等操作,大家可以在上面的dom4j链接中查看使用
下图是以上代码的运行结果:
本文来自博客园,作者:Schieber,转载请注明原文链接:https://www.cnblogs.com/xiqingbo/p/java-09.html