XML文件样例:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="001">
<bookName>java从入门到精通</bookName>
<authors>
<author>tom</author>
<author>daxiong</author>
</authors>
<price>9.9</price>
<publish>清华大学出版社</publish>
</book>
<book id="002">
<bookName>Oracle从入门到精通</bookName>
<authors>
<author>mengmeng</author>
<author>Mr Li</author>
</authors>
<price>19.9</price>
<publish>清华大学出版社</publish>
</book>
<book id="003">
<bookName>HTML从入门到精通</bookName>
<authors>
<author>jiayin</author>
</authors>
<price>29.9</price>
<publish>清华大学出版社</publish>
</book>
<book id="004">
<bookName>javaScript从入门到精通</bookName>
<authors>
<author>乔峰</author>
<author>乔布斯</author>
<author>lily</author>
</authors>
<price>9.9</price>
<publish>人民出版社</publish>
</book>
<book id="005">
<bookName>jsp从入门到精通</bookName>
<authors>
<author>tom</author>
<author>lily</author>
<author>zrl</author>
<author>qiao</author>
</authors>
<price>9.9</price>
<publish>邮电大学出版社</publish>
</book>
</books>
实体类:
package com.dom4j;
import java.util.List;
public class Book implements Comparable<Book>{
private int id;
private String bookName;
private List<String> authors;
private String publish;
private double price;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public List<String> getAuthors() {
return authors;
}
public void setAuthors(List<String> authors) {
this.authors = authors;
}
public String getPublish() {
return publish;
}
public void setPublish(String publish) {
this.publish = publish;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "Book [id=" + id + ", bookName=" + bookName + ", authors=" + authors + ", publish=" + publish
+ ", price=" + price + "]";
}
@Override
public int compareTo(Book book) {
if(this.price < book.price){
return -1;
}
if(this.price > book.price){
return 1;
}
return this.bookName.compareTo(book.bookName);
}
}
DOM4j解析代码:
package com.dom4j;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Dom4jParseBookXml {
public static void main(String[] args){
//1 获得SAXReader对象
SAXReader saxReader = new SAXReader();
//2 获取document对象
try {
Document document = saxReader.read(new File("src//com//dom4j//book.xml"));
//3 获得根节点
Element rootElement = document.getRootElement();
//4 获取根节点下的所有book节点
List<Element> bookElementList = rootElement.elements();
Set<Book> setBooks = new TreeSet<Book>();
for (Element element : bookElementList) {
//定义Book对象
Book book=new Book();
//分别获值并赋值
//(1) id是作为属性出现的
//方法一
// Attribute attr = element.attribute("id");
// book.setId(Integer.parseInt(attr.getValue()));
//方法二
String id = element.attributeValue("id");
book.setId(Integer.parseInt(id));
//(2) name
String bookName = element.elementText("bookName");
book.setBookName(bookName);
//(3) authors
Element ele = element.element("authors");
List<Element> autList = ele.elements();
//获得作者,作者有多个
List<String> authors=new ArrayList<>();
for (Element element2 : autList) {
String author = element2.getText();
authors.add(author);
}
book.setAuthors(authors);
//(4) price
String price=element.elementText("price");
book.setPrice(Double.parseDouble(price));
//(5) publish
String publish=element.elementText("publish");
book.setPublish(publish);
setBooks.add(book);
}
for (Book book : setBooks) {
System.out.println(book);
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
注意,因解析过程中,采用TreeSet存储book,所以实体类需要实现Comparable接口,并实现compareTo方法
应用dom4j解析xml文件的时候,需要外部jar包:dom4j-2.0.0-RC1.jar
解析结果: