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链接中查看使用