XML是可扩展标记语言的简称,作为一种通用的数据交换格式,它的平台无关性、语言无关性、系统无关性 给数据集成与交互带来了极大的方便。XML在不同语言中的解析方式都是一样的,只不过实现的语言不同而已。

在Java中,XML的解析方式有四种,分别是:DOM解析;SAX解析;JDOM解析;DOM4J解析。前两种属于官方自带的解析方式,与平台无关;后两者是扩展方法,只适用于Java平台。

OK,这篇,我们只研究使用最广泛的DOM4J。

1、简介:

关于dom4j,首先我们要知道,它不是属于Java自带的解析XML方式,也就是说,要想使用dom4j,首先你需要先添加dom4j jar包。

OK,添加完jar包之后,我们就可以研究下它的语法了。

2、语法:

1)、获取根元素:

Element e1 = document.getRootElement();

2)、获取某个元素下面的子元素:

Element e2 = root.element("xxx");

3)、获取元素的子元素集合1 (所有子元素)

List e_list = e2.elements();

4)、获取元素的子元素集合2(指定名称的子元素集合)

List e_list = e2.elements("user");

5)、获取元素属性的值

elements.attributeValue("name");

6)、获取元素的内容

element.getText();
。。。

3、一个栗子:

Java
aaa
2014
89
Linux
bbb
2015
77
Spring
ccc
2016
100
public class Book {
private int id;
private String name;
private String author;
private int year;
private double price;
//setter,getter ...
@Override
public String toString() {
return "Book [id=" + id + ", name=" + name + ", author=" + author
+ ", year=" + year + ", price=" + price + "]";
}
}
public class Test09 {
private List bookList = null;
private Book book = null;
private List getBooks(File file) {
SAXReader reader = new SAXReader();
try {
Document document = reader.read(file);
Element bookstore = document.getRootElement();
Iterator stores = bookstore.elementIterator();
bookList = new ArrayList();
while(stores.hasNext()){
book = new Book();
Element bookElement = (Element) stores.next();
List attributes = bookElement.attributes();
for(Attribute attribute : attributes){
if(attribute.getName().equals("id")){
String id = attribute.getValue();
book.setId(Integer.parseInt(id));
}
}
Iterator bookit = bookElement.elementIterator();
while(bookit.hasNext()){
Element child = (Element) bookit.next();
String nodeName = child.getName();
if(nodeName.equals("name")){
String name = child.getStringValue();
book.setName(name);
}else if(nodeName.equals("author")){
String author = child.getStringValue();
book.setAuthor(author);
}else if(nodeName.equals("year")){
String year = child.getStringValue();
book.setYear(Integer.parseInt(year));
}else if(nodeName.equals("price")){
String price = child.getStringValue();
book.setName(price);
}
}
bookList.add(book);
book = null;
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bookList;
}
public static void main(String[] args) {
File file = new File("src/java_19/book.xml");
List bookList = new Test09().getBooks(file);
for(Book book:bookList){
System.out.println(book);
}
}
}
控制台输出:
Book [id=1, name=89, author=aaa, year=2014, price=0.0]
Book [id=2, name=77, author=bbb, year=2015, price=0.0]
Book [id=3, name=100, author=ccc, year=2016, price=0.0]

OK,先这样,饿了 准备下班...