DOM4j解析XML文件

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


解析结果:







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值