Digester不是一个XML Parser,它只是对SAX更高层次上的一个封装使用Digester,将XML映射成javaBean. 我们无须了解SAX和DOM的解析过程,只要给Digester添加一些解析规则,就能对一个xml文件进行解析。Digester使用堆栈来保存xml节点(stack.push()方法),当该xml节点中嵌套的所有子节点解析完毕,该节点将被弹出(stack.pup()方法)。Digester最大的优点就是使用模式匹配来表示xml文件中节点之间的父子关系 。
下载地址:http://commons.apache.org/digester/
代码如下:
students.xml
<?
xml version="1.0" encoding="UTF-8"
?>
<
stuClass
name
="fddfdf"
>
<
student
>
<
name
from
="cn"
>
Java Boy
</
name
>
<
course
>
JSP
</
course
>
</
student
>
<
student
>
<
name
>
Java Girl
</
name
>
<
course
>
EJB
</
course
>
</
student
>
</
stuClass
>
Model类:Student.java
package
demo.javabean;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
public
class
Student
...
{
private String name;
private String from;
private String course;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public String getName() ...{
return name;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void setName(String name) ...{
this.name = name;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public String getFrom() ...{
return from;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void setFrom(String from) ...{
this.from = from;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public String getCourse() ...{
return course;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void setCourse(String course) ...{
this.course = course;
}
}
Model类:StuClass.java
package
demo.javabean;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
import
java.util.Vector;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
public
class
StuClass
...
{
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
private String name;
private Vector students = new Vector();
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public String getName() ...{
return name;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void setName(String name) ...{
this.name = name;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public Vector getStudents() ...{
return students;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void setStudents(Vector students) ...{
this.students = students;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void addStudent(Student student)...{
students.add(student);
}
}
测试类:DigestStudents.java
package
demo;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
import
java.util.Vector;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
import
org.apache.commons.digester.Digester;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
import
demo.javabean.StuClass;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
public
class
DigestStudents
...
{
Vector stuClass;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public DigestStudents() ...{
stuClass = new Vector();
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public static void main(String[] args) ...{
DigestStudents digestStudents = new DigestStudents();
digestStudents.digest();
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
private void digest() ...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
try ...{
Digester digester = new Digester();
// Push the current object onto the stack
digester.setValidating(false);
// Creates a new instance of the Student class
digester.addObjectCreate("stuClass", "demo.javabean.StuClass");
digester.addSetProperties("stuClass", "name", "name");
digester.addObjectCreate("stuClass/student", "demo.javabean.Student");
// Uses setName method of the Student instance
// Uses tag name as the property name
// addCallMethod与addBeanPropertySetter等价
// 参数 0代表一个参数,默认就是当前读的数据,最后一个参数0表示参数个数
digester.addCallMethod("stuClass/student/name", "setName", 0);
digester.addSetProperties("stuClass/student/name", "from", "from");
// 加上一个属性名form
// digester.addBeanPropertySetter( "stuClass/student/name");
// Uses setCourse method of the Student instance
// Explicitly specify property name as 'course'
digester.addBeanPropertySetter("stuClass/student/course");
// Move to next student,addStudent为其中的一个方法
digester.addSetNext("stuClass/student", "addStudent",
"demo.javabean.Student");
StuClass ds = (StuClass) digester.parse(this.getClass()
.getClassLoader().getResourceAsStream(
"demo/students.xml"));
// Print the contents of the Vector
System.out.println("Students Vector " + ds.getName());
System.out.println("Students Vector " + ds.getStudents());
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
} catch (Exception ex) ...{
ex.printStackTrace();
}
}
// public void addStudent( Student stud ) {
// //Add a new Student instance to the Vector
// stuClass.add( stud );
// }
}