前段時間學習了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鏈接中查看使用