您的位置:首页 > 其它

Digester解析XML

2012-08-16 17:21 274 查看
books.xml

<?xml version="1.0" encoding="UTF-8" ?>
<library name="alibaba图书馆">
<book title ="thinking in java"  author="xxx">
<chapter>
<no>第一章</no>
<caption>第一章的标题</caption>
</chapter>
<chapter>
<no>第二章</no>
<caption>第二章的标题</caption>
</chapter>
</book>
<book title="effective java"  author="yyy">
<chapter>
<no>第一章</no>
<caption>第一章的标题</caption>
</chapter>
</book>
<book title="lucene in action"  author="zzz">
<chapter>
<no>第一章</no>
<caption>metting lucene</caption>
</chapter>
<chapter>
<no>第二章</no>
<caption>talk about lucene</caption>
</chapter>
</book>
</library>


DigesterXML.java

package com.lucene;

import java.io.IOException;

import org.apache.commons.digester.Digester;
import org.xml.sax.SAXException;

public class DigesterXML {

public static void main(String[] args) {
Digester digester=new Digester();
//是否验证dtd
digester.setValidating(false);

//将library标签映射到Library.class
digester.addObjectCreate("library", Library.class);
//解析library节点的属性
digester.addSetProperties("library");

//匹配library/book为book.class
digester.addObjectCreate("library/book", Book.class);
//设置booke节点的title属性
digester.addSetProperties("title");
//设置booke节点的author属性
digester.addSetProperties("author");

//调用setBookInfo方法设置book的两个属性title、author 含两个参数title、author
digester.addCallMethod("library/book", "setBookInfo",2);
//标识参数,第一个参数从0开始,为title、第二个参数为author从1开始
digester.addCallParam("library/book", 0, "title");
digester.addCallParam("library/book", 1, "author");

//匹配library/book/chapter为Chapter.class
digester.addObjectCreate("library/book/chapter", Chapter.class);
//设置chapter对应属性的值
digester.addBeanPropertySetter("library/book/chapter/no", "no");
digester.addBeanPropertySetter("library/book/chapter/caption", "caption");

//解析下一个library/book/chapter
digester.addSetNext("library/book/chapter", "addChapter");

//解析下一个library/book
digester.addSetNext("library/book", "addBook");

try {
Library library = (Library) digester.parse(DigesterXML.class.getClassLoader().getResourceAsStream("books.xml"));
System.out.println("图书馆:"+library.getName());
System.out.println("共藏书:"+library.getBookList().size());
System.out.println("**************************************");

for (Book book : library.getBookList()) {

System.out.println("书名:"+book.getTitle()+"\t作者:"+book.getAuthor());
System.out.println("----------------------------------------");
System.out.println("共"+book.getChapters().size()+"章");
System.out.println("-----------------显示章节-----------------------");
for (Chapter chapter : book.getChapters()) {
System.out.println(chapter.getNo()+":"+chapter.getCaption());
}
System.out.println("----------------------------------------");

}
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}

}

}


输出结果:

图书馆:alibaba图书馆

共藏书:3

**************************************

书名:thinking in java 作者:xxx

----------------------------------------

共2章

-----------------显示章节-----------------------

第一章:第一章的标题

第二章:第二章的标题

----------------------------------------

书名:effective java 作者:yyy

----------------------------------------

共1章

-----------------显示章节-----------------------

第一章:第一章的标题

----------------------------------------

书名:lucene in action 作者:zzz

----------------------------------------

共2章

-----------------显示章节-----------------------

第一章:metting lucene

第二章:talk about lucene

----------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: