1. 程式人生 > >使用dom4j解析xml檔案,並封裝為javabean物件

使用dom4j解析xml檔案,並封裝為javabean物件

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:本篇博文僅僅為個人學習的學習筆記博文。