官方文档:http://commons.apache.org/digester/guide/core.html
测试小程序:
package com.zizhu;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.commons.digester3.Digester;
import org.apache.commons.digester3.ObjectCreateRule;
import org.apache.commons.digester3.Rule;
import org.apache.commons.digester3.SetNextRule;
import org.apache.commons.digester3.SetPropertiesRule;
import org.xml.sax.SAXException;
import com.zizhu.model.Child;
import com.zizhu.model.Parent;
import com.zizhu.model.ServletBean;
import com.zizhu.model.ValueWrap;
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
InputStream is = Client.class.getClassLoader().getResourceAsStream("user.xml");
//parse user.xml
Digester dig1 = new Digester();
//创建对象
Rule parent = new ObjectCreateRule("com.zizhu.model.Parent");
Rule child = new ObjectCreateRule("com.zizhu.model.Child");
//设置属性
Rule parentProp = new SetPropertiesRule();
Rule childProp = new SetPropertiesRule();
//建立父子关系
Rule relation = new SetNextRule("addChildren");
dig1.addRule("parent", parent);
dig1.addRule("parent", parentProp);
dig1.addRule("parent/child", child);
dig1.addRule("parent/child", childProp);
dig1.addRule("parent/child", relation);
Parent p = null;
try {
p = dig1.parse(is);
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}finally{
try {
is.close();
} catch (IOException e) {
}
}
System.out.println(p.getName());
List<Child> children = p.getChildren();
for(Child c : children){
System.out.println("child : id = " + c.getId() + ", name="+
c.getName() + ", age = " + c.getAge());
}
//模拟加载web.xml
InputStream is2 = Client.class.getClassLoader().getResourceAsStream("web.xml");
//parse user.xml
Digester dig2 = new Digester();
dig2.addObjectCreate("web-app/servlet", "com.zizhu.model.ServletBean");
dig2.addCallMethod("web-app/servlet/servlet-name", "setServletName", 0);//0表示将内容解析为单个参数
dig2.addCallMethod("web-app/servlet/servlet-class", "setServletClass", 0);
dig2.addCallMethod("web-app/servlet/init-param", "addInitParam", 2);//2表示接下来设置2个参数
dig2.addCallParam("web-app/servlet/init-param/param-name", 0);
dig2.addCallParam("web-app/servlet/init-param/param-value", 1);
ServletBean servlet = null;
try {
servlet = dig2.parse(is2);
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}finally{
try {
is2.close();
} catch (IOException e) {
}
}
System.out.println(servlet.getServletName());
System.out.println(servlet.getServletClass());
List<ValueWrap> initParams = servlet.getInitParams();
for(ValueWrap wrap : initParams){
System.out.println("name - " + wrap.getName() + ", value - " + wrap.getValue());
}
}
}