xml文件内容如下:
Book.java文件如下:
Library.java文件内容如下:
<?xml version="1.0"?>
<library>
<book id="1" name="java book" auther="小王">
<time>1988-03-25</time>
</book>
<book id="2" name="c book" auther="小王">
<time>1999-9-09</time>
</book>
<book id="3" name="UML book" auther="鳄鱼">
<time>1988-89-99</time>
</book>
<book id="4" name="c++ book" auther="小鳄鱼">
<time>1988-89-99</time>
</book>
</library>
Book.java文件如下:
public class Book {
private String id = null;
private String name = null;
private String auther = null;
private String time = null;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuther() {
return auther;
}
public void setAuther(String auther) {
this.auther = auther;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public void showBookInfo() {
System.out.println("*******book id is :" + this.getId() + "**********");
System.out.println("book name is :" + this.getName());
System.out.println("book auther is :" + this.getAuther());
System.out.println("book time is :" + this.getTime());
}
}
Library.java文件内容如下:
public class Library {
private Vector<Book> books = null;// 创建一个Vector对象,用来存储book对象
/**
* 解析XML文件
*
* @param file
* 文件名
* @throws IOException
* @throws SAXException
*/
public void praseXML(File file) throws IOException, SAXException {
Digester dig = new Digester();// 创建一个Digester对象
dig.setValidating(false);// 设置不用DTD验证
dig.addObjectCreate("library", Library.class);// 解析时,当遇到library结点,则创建一个libraray对象
dig.addObjectCreate("library/book", Book.class);// 解析时,当遇到library下的book结点,则创建一个book对象
dig.addSetProperties("library/book", "id", "id");// 将book结点中的attribute的id值赋给book对象.也是一个rule(规则)
dig.addBeanPropertySetter("library/book/time", "time");// 将book结点下的time结点的值赋给book对象time属性,有三种赋值方式,此为其一
// dig.addCallMethod("library/book/time",
// "setTime",0);//将book结点下的time结点的值赋给book对象time属性,有三种赋值方式,此为其二
/*
* 将book结点下的time结点的值赋给book对象time属性,有三种赋值方式,此为其三
* dig.addCallMethod("library/book", "setTime", 1);
* dig.addCallParam("library/book/time", 0);
*/
dig.addSetNext("library/book", "addBook");// 当在次遇到book结点时进行的操作。
Library lib = (Library) dig.parse(file);// 开始解析,并返回此XML文件的根结点
lib.showLibraryInfo();// 输出其lib的信息
}
/**
* 测试类
*
* @param args
*/
public static void main(String[] args) {
File file = new File("E:\\wang\\work\\digester\\src\\book.xml");// 创建一个文件对象
try {
new Library().praseXML(file);// 创建 一个library对象,并调用praseXML方法
} catch (Exception e) {
System.out.println(e.toString());
}
}
public Library() {
books = new Vector<Book>();
}
public void addBook(Book book) {
books.add(book);
}
public void showLibraryInfo() {
System.out.println("library has " + books.size() + " kides book");
for (int i = 0; i < books.size(); i++)
books.get(i).showBookInfo();
}
}