您的位置:首页 > 编程语言 > Java开发

Java——DOM4J解析XML文件

2016-03-19 16:47 537 查看
跟前几篇文章一样,依旧使用books.xml和Book类,直接给出代码:

package domain;

public class Book {
private int id;
private String name;
private String author;
private float price;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

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 float getPrice() {
return price;
}

public void setPrice(float price) {
this.price = price;
}

@Override
public String toString() {
return "Book [id=" + id + ", name=" + name + ", author=" + author + ", price=" + price + "]";
}

}


<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book id="1">
<name>冰与火之歌</name>
<author>乔治马丁</author>
<price>89</price>
</book>
<book id="2">
<name>安徒生童话</name>
<author>安徒生</author>
<price>24</price>
</book>
</bookstore>


由于DOM4J并不是Java官方提供的解析方式,所有要使用DOM4J解析XML文件,首先需要下载DOM4J的JAR包。(谷歌一下即可)

创建好books.xml与Book类,并将DOM4J的JAR包引入工程后,准备工作就做好了。

下面开始实现解析工具类:

首先需要创建SAXReader类的对象:

// 创建SAXReader对象
SAXReader reader = new SAXReader();


将XML文件加载到SAXReader对象的read()方法中去:

// 将XML文件加载到reader的read()方法中去
Document document = reader.read(file);


获取XML文件的根节点:

// 获取XML文件的根节点
Element root = document.getRootElement();


获取根节点下的所有子节点:

// 获取根节点下的所有子节点
Iterator<Element> booksIterator = root.elementIterator();


至此,我们就得到了所有的子节点(book),接下来,就是对这些子节点逐个进行解析。

通过节点的
attributes()
方法可以获取到该节点的所有属性,通过属性的
getName()
getValue()
方法可以获取每个属性的名称和值。

通过节点的
getName()
方法可以获取到每个节点的名称,通过
getStringValue()
方法可以获取到节点的值。再将值封装到Book对象相应的属性中即可。

// 遍历每一个子节点
while (booksIterator.hasNext()) {
Book aBook = new Book();

Element book = booksIterator.next();

// 遍历该节点的所有属性
List<Attribute> attrs = book.attributes();
for (Attribute attribute : attrs) {
switch (attribute.getName()) {
case "id":
aBook.setId(Integer.valueOf(attribute.getValue()));
break;
}
}

//遍历该节点的所有子节点
Iterator<Element> children = book.elementIterator();
while(children.hasNext()){
Element child = children.next();
switch(child.getName()){
case "name":
aBook.setName(child.getStringValue());
break;
case "author":
aBook.setAuthor(child.getStringValue());
break;
case "price":
aBook.setPrice(Integer.valueOf(child.getStringValue()));
break;
}
}

booksList.add(aBook);
}


下面是完整的工具类:

package util;

import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import domain.Book;

public class ParseUtil {

private List<Book> booksList = new ArrayList<Book>();

public void parseXMLByDOM4J(File file) {

// 创建SAXReader对象 SAXReader reader = new SAXReader();

try {

// 将XML文件加载到reader的read()方法中去 Document document = reader.read(file);

// 获取XML文件的根节点 Element root = document.getRootElement();

// 获取根节点下的所有子节点 Iterator<Element> booksIterator = root.elementIterator();

// 遍历每一个子节点 while (booksIterator.hasNext()) { Book aBook = new Book(); Element book = booksIterator.next(); // 遍历该节点的所有属性 List<Attribute> attrs = book.attributes(); for (Attribute attribute : attrs) { switch (attribute.getName()) { case "id": aBook.setId(Integer.valueOf(attribute.getValue())); break; } } //遍历该节点的所有子节点 Iterator<Element> children = book.elementIterator(); while(children.hasNext()){ Element child = children.next(); switch(child.getName()){ case "name": aBook.setName(child.getStringValue()); break; case "author": aBook.setAuthor(child.getStringValue()); break; case "price": aBook.setPrice(Integer.valueOf(child.getStringValue())); break; } } booksList.add(aBook); }

} catch (DocumentException e) {
e.printStackTrace();
}

}

public List<Book> getBooksList() {
return booksList;
}

public void setBooksList(List<Book> booksList) {
this.booksList = booksList;
}

}


测试结果如下:

[Book [id=1, name=冰与火之歌, author=乔治马丁, price=89.0], Book [id=2, name=安徒生童话, author=安徒生, price=24.0]]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java xml