1.说明
本文将通过一段代码来说明Digester解析XML的顺序为XML文件中元素的先后顺序,而不是digest中解析规则的配置顺序。
2.文件结构
|--com.siyuan.digestertest.bean
|--Student.java
|--com.siyuan.digestertest.test
|--DigesterTest
|-myrule.xml
|-student.xml
|-student1.xml
3.源代码
1)Student.java
package com.siyuan.digestertest.bean;
import java.io.Serializable;
public class Student implements Serializable{
private static final long serialVersionUID = 5683414242956186693L;
private String name;
private int age;
public Student() {
}
public String getName() {
return name;
}
public void setName(String name) {
System.out.println("set name...");
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
System.out.println("set age...");
this.age = age;
}
public String toString() {
return "Student[name=" + name + ",age=" + age + "]";
}
}
2)DigesterTest.java
package com.siyuan.digestertest.test;
import java.io.IOException;
import org.apache.commons.digester3.Digester;
import org.apache.commons.digester3.binder.DigesterLoader;
import org.apache.commons.digester3.xmlrules.FromXmlRulesModule;
import org.xml.sax.SAXException;
import com.siyuan.digestertest.bean.Student;
public class DigesterTest {
/**
* @param args
* @throws SAXException
* @throws IOException
* Output :
* set name...
* set age...
* Student[name=siyuan,age=24]
* set age...
* set name...
* Student[name=siyuan,age=24]
*/
public static void main(String[] args) throws IOException, SAXException {
DigesterLoader loader = DigesterLoader
.newLoader(new FromXmlRulesModule() {
@Override
protected void loadRules() {
loadXMLRules(DigesterTest.class.getResource("/myrule.xml"));
}
});
Digester digester = loader.newDigester();
Student student = (Student)digester.parse(DigesterTest.class.getResource("/student.xml"));
System.out.println(student);
student = (Student)digester.parse(DigesterTest.class.getResource("/student1.xml"));
System.out.println(student);
}
}
3)myrule.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE digester-rules PUBLIC "-//Apache Commons //DTD digester-rules XML V1.0//EN" "http://commons.apache.org/digester/dtds/digester-rules-3.0.dtd">
<digester-rules>
<pattern value="student">
<object-create-rule classname="com.siyuan.digestertest.bean.Student" />
<pattern value="name"><bean-property-setter-rule propertyname="name" /></pattern>
<pattern value="age"><bean-property-setter-rule propertyname="age" /></pattern>
</pattern>
</digester-rules>
4)student.xml
<?xml version="1.0" encoding="UTF-8"?>
<student>
<name>siyuan</name>
<age>24</age>
</student>
5)student1.xml
<?xml version="1.0" encoding="UTF-8"?>
<student>
<age>24</age>
<name>siyuan</name>
</student>
4.运行结果
set name...
set age...
Student[name=siyuan,age=24]
set age...
set name...
Student[name=siyuan,age=24]