Java——DOM4J解析XML文件
2016-03-19 16:47
537 查看
跟前几篇文章一样,依旧使用books.xml和Book类,直接给出代码:
由于DOM4J并不是Java官方提供的解析方式,所有要使用DOM4J解析XML文件,首先需要下载DOM4J的JAR包。(谷歌一下即可)
创建好books.xml与Book类,并将DOM4J的JAR包引入工程后,准备工作就做好了。
下面开始实现解析工具类:
首先需要创建SAXReader类的对象:
将XML文件加载到SAXReader对象的read()方法中去:
获取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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序