要进行解析的xml文件对象
<?xml version="1.0" encoding="UTF-8" ?>
<bookstore>
<book id="1">
<name>冰与火之歌</name>
<author>乔治马丁</author>
<year>2014</year>
<price>89</price>
</book>
<book id="2">
<name>安徒生童话</name>
<author>安徒生</author>
<year>2017</year>
<price>77</price>
<language>Chinese</language>
</book>
</bookstore>
源代码:
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;
public class DOM4JTest {
//以DOM4J方式来对xml文件对象进行解析操作
public static void main(String[] args) {
ArrayList<Book> bookList=new ArrayList<Book>();//建立一个集合对象用于将解析出来的book对象存放到集合对象当中去
Book bookEmpty=null;//用于保存从xml文件对象所解析出来的book标签当中的数据信息
//创建SAXReader对象
SAXReader reader=new SAXReader();
//通过SAXReader对象当中的read方法来对xml文件对象进行加载操作,并且获取document对象
try {
Document document=reader.read(new File("xml文件//books.xml"));
Element bookStore=document.getRootElement();//获取当前xml文件对象当中的根节点
//对根节点的子节点当中的数据信息值进行遍历操作
Iterator it=bookStore.elementIterator();//获取一个对当前根节点当中的元素进行遍历操作迭代器对象
//通过迭代器的遍历操作来对根节点当中的元素进行获取操作
while(it.hasNext())
{//当当前迭代器对象当中有对象内容时
Element book=(Element)it.next();//将迭代器所获取到的object对象强制转化为节点类型对象
System.out.println("===========开始对某一本书进行解析===========");
bookEmpty=new Book();
//获取book标签对象的属性名属性值及其子节点对象
List<Attribute> bookAttrs=book.attributes();//获取book标签对象当中的全部属性值,并将其以数组的方式来进行存放操作
for(Attribute attr : bookAttrs)
{//对book标签属性集合对象当中的属性进行遍历输出操作
System.out.println("属性名:"+attr.getName()+"----属性值:"+attr.getValue());//对当前所遍历到的book标签对象当中的属性值进行输出操作
if(attr.getName().equals("id"))
{//当前所解析出来的属性值为id属性,所以将其保存到book实体对象当中去
bookEmpty.setId(attr.getValue());
}
}
//对当前book标签对象当中的子结点进行遍历操作
Iterator itera=book.elementIterator();//实例化一个book标签对象的子节点元素标签对象的迭代器对象
//变量输出book标签对象当中的子结点对象
while(itera.hasNext())
{//book对象的迭代器将会对book标签对象当中的子结点对象进行遍历输出操作
Element bookChild=(Element)itera.next();
System.out.println("结点名:"+bookChild.getName()+"---结点值:"+bookChild.getStringValue());
//将当前所遍历得到的子结点对象当中的有效值保存到对应的book实体对象当中去
if(bookChild.getName().equals("name"))
bookEmpty.setName(bookChild.getStringValue());
if(bookChild.getName().equals("author"))
bookEmpty.setAuthor(bookChild.getStringValue());
if(bookChild.getName().equals("year"))
bookEmpty.setYear(bookChild.getStringValue());
if(bookChild.getName().equals("price"))
bookEmpty.setPrice(bookChild.getStringValue());
if(bookChild.getName().equals("language"))
bookEmpty.setLanguage(bookChild.getStringValue());
}
bookList.add(bookEmpty);//将当前的book实体对象保存到集合对象当中去
bookEmpty=null;
System.out.println("===========结束对某一本书的解析=============");
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("bookList集合对象当中一共保存了"+bookList.size()+"本书籍对象.");
System.out.println("第一本书的名称为:"+bookList.get(0).getName());
System.out.println("第二本书的名称为:"+bookList.get(1).getName());
}
}
运行结果: