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

下圖是以上代碼的運行結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM