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]