Digester库是用于解析XML文档。对应XML中每一个元素,Digester对应检查它是否要做事先预定义的事件。在调用Digester对象的parse()方法之前,程序员应该先定义好Digester对象执行那些动作.下面有个简单的案例:
1.xml示例
<?xml version="1.0" encoding="UTF-8"?>
<employee firstName="dada" lastName="aa">
<office desc="zz1">
<address stressName="zz2"></address>
</office>
<office desc="zz3">
<address stressName="zz4"></address>
</office>
</employee>
2.xml节点对应的model
public class Employee {
private String firstName;
private String lastName;
private List<Office> offices=new ArrayList<Office>();
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public void addOffice(Office office){
offices.add(office);
}
public List<Office> getOffices(){
return offices;
}
public void printName(){
System.out.println("firstName is:"+firstName+" "+"lastName is:"+lastName);
}
}
public class Office {
private Address address;
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
private String desc;
}
public class Address {
private String stressName;
public String getStressName() {
return stressName;
}
public void setStressName(String stressName) {
this.stressName = stressName;
}
}
3.测试类
**
* 用Digester类进行进行时,当遇到注册的rule时,首先从Digester中注册的rules中找出对用的Rule(如:SetPropertiesRule,ObjectCreateRule等)
* 然后去调用统一的接口begin()和end()进行处理
*/
public class DigesterTest {
public static void main(String[]args)throws Exception{
File file=new File(DigesterTest.class.getResource("/").getPath() + "employer")
Digester digester=new Digester()
digester.addObjectCreate("employee","test.model.Employee")
digester.addSetProperties("employee")
digester.addCallMethod("employee","printName")
digester.addObjectCreate("employee/office","test.model.Office")
digester.addSetProperties("employee/office")
digester.addSetNext("employee/office","addOffice")
digester.addObjectCreate("employee/office/address","test.model.Address")
digester.addSetProperties("employee/office/address")
digester.addSetNext("employee/office/address","setAddress")
Employee employee=(Employee)digester.parse(file)
for(Office office:employee.getOffices()){
System.out.println(office.getDesc())
System.out.println(office.getAddress().getStressName())
}
}
}
4.执行结果
firstName is:dada lastName is:aa
zz1
zz2
zz3
zz4