使用dom4j解析xml檔案,並封裝為javabean物件
阿新 • • 發佈:2019-01-21
dom4j是一個java的XML api,效能優異、功能強大、易於使用。這裡使用dom4j對xml檔案進行解析,並完成對檔案的封裝。
實現對xml檔案的解析,主要使用到的是dom4j中的SAXReader類,該類的使用方法如下:
SAXReader 類
//構造SAXReader
SAXReader sr = new SAXReader();
//載入檔案
Document doc = sr.read(File file)
//Document物件代表XML檔案在記憶體中的印象
//取得根元素
Element getRootElement()
Element .getName()
Element.elements() //取得該元素下的所有直接子元素
Element.elementText("str") //從一個元素導航到另一個元素,並取出該元素的文字
Element.element("str"); //導航到另一個元素
Element.attributeValue("str"); //取得該元素對應的屬性
該專案中由於使用到dom4j,因此需要將dom4j的jar檔案build path到專案中。這裡的XML檔案使用了w3school中的一個xml例子,這裡命名為book.xml,檔案內容如下:
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author >J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
這裡的XML檔案並沒有使用任何約束檔案。但檔案中涉及到子元素以及屬性,因此需要對屬性和子元素進行解析。根據XML檔案的內容(將子元素和屬性定義為javabean的欄位),建立Book類,程式碼如下;
package cn.myseu.test.xmlparser;
public class Book {
private String title;
private String author;
private String year;
private String price;
private String category;
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
}
上面的程式碼實現了對Book物件的封裝。下面的程式將實現對該XML檔案的解析,並將其存放到一個List中,然後列印該List中的所有元素。測試程式碼如下:
package cn.myseu.test.xmlparser;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Demo {
public static void main(String[] args) throws Exception {
SAXReader sr = new SAXReader();
Document document = sr.read(new File("src/cn/myseu/test/xmlparser/book.xml"));
Element root = document.getRootElement();
List<Element> elementList = root.elements();
List<Book> bookList = new ArrayList();
for (Element e : elementList) {
Book book = new Book();
book.setTitle(e.elementText("title"));
book.setAuthor(e.elementText("author"));
book.setYear(e.elementText("year"));
book.setPrice(e.elementText("price"));
book.setCategory(e.attributeValue("category"));
bookList.add(book);
}
for (Book book : bookList) {
System.out.println("title:"+book.getTitle()+"\t category:"+book.getCategory()+"\t author:"+book.getAuthor()+"\t year:"+book.getYear()+"\t price:"+book.getPrice());
}
}
}
如上程式碼,實現了對XML檔案的解析,並完成了對解析元素的封裝。然後列印輸出。輸出結果如下:
title:Everyday Italian category:COOKING author:Giada De Laurentiis year:2005 price:30.00
title:Harry Potter category:CHILDREN author:J K. Rowling year:2005 price:29.99
title:Learning XML category:WEB author:Erik T. Ray year:2003 price:39.95
至此,整個XML檔案的解析工作暫告一段落。這裡僅僅完成了對XML檔案的解析,因此也只使用到了一個SAXReader類,dom4j還可以實現更多的功能。在以後的博文中會進一步的學習與探討。
ps:本篇博文僅僅為個人學習的學習筆記博文。