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

下图是以上代码的运行结果:

Java中使用dom4j解析xml文档_dom4j