digester 用法小结
digester可以用来解析xml信息为对象,这样就可以不用SAXParse方法来取xml然后进行解析,可以直接根据自定义规则来处理.stusts中就很好了使用digester
//实例化对象
Digester dig = new Digester();
//存入调用对象
dig.push(this);
//调置不校验
dig.setValidating(false);
//当遇到aa/bb/cc节点时 调用存入对象的methodTest方法,该方法参数为 2个
dig.addCallMethod("aa/bb/cc", "methodTest", 2);
dig.addCallParam("aa/bb/cc/a", 0);//入参1
dig.addCallParam("aa/bb/cc/b", 1);//入参2
//查找文件流
InputStream in = this.getClass().getResourceAsStream("/test/digester.xml");
try {
//解析
dig.parse(in);
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
//dig.addObjectCreate("aa/bb/cc", com.lins.test.dto.DigesterABC.class);
//创建工厂
dig.addFactoryCreate("aa/bb/cc", new FactoryClass());
dig.addSetProperties("aa/bb/cc");
//当到节点 aa/bb/cc/a时调用 setAa方法,把a的text()设置为值
dig.addBeanPropertySetter("aa/bb/cc/a","aa");
dig.addBeanPropertySetter("aa/bb/cc/b","bb");
dig.addSetNext("aa/bb/cc", "printStudent");
//dig.addRule("aa/bb/cc/set-property", new ABCRule());
dig.addSetProperty("aa/bb/cc/set-property", "property","value");
InputStream in = this.getClass().getResourceAsStream("/test/digester.xml");
try {
//返回调用对象
Test test = (Test)dig.parse(in);
System.out.println(test.stuList.size());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*当遇到 struts-config/data-sources/data-source 节点时进行创建DataSourceConfig对象
digester.addObjectCreate
("struts-config/data-sources/data-source",
org.apache.struts.config.DataSourceConfig.class);
*/
digester.addObjectCreate
("struts-config/data-sources/data-source",
"org.apache.struts.config.DataSourceConfig",
"className");
/*设置data-source 节点的属性,这个属性是上面创造的对象DataSourceConfig所具有的属性
如<data-source id="ss" /> 则 DataSourceConfig 这个对象就必须有setId这个方法*/
digester.addSetProperties
("struts-config/data-sources/data-source");
/* 当遇到 struts-config/data-sources/data-source 节点时,调用addDataSourceConfig方法,
*这个方法应该是 digester实例对象push的对象的方法 在struts里是moudleConfig
*/
digester.addSetNext
("struts-config/data-sources/data-source",
"addDataSourceConfig",
"org.apache.struts.config.DataSourceConfig");
/*当遇到data-source/set-property 节点时,调用 AddDataSourcePropertyRule的规则,
这个类要扩展rule抽象类
*/
digester.addRule
("struts-config/data-sources/data-source/set-property",
new AddDataSourcePropertyRule());
/*当遇到struts-config/action-mappings/action时,创建 ActionMappingFactory对象
* 这个对象扩展抽象类AbstractObjectCreationFactory,并且要实象抽象方法createObject产生一对象返回
*/
digester.addFactoryCreate
("struts-config/action-mappings/action",
new ActionMappingFactory());
/*同data-source*/
digester.addSetProperties
("struts-config/action-mappings/action");
/*同data-source*/
digester.addSetNext
("struts-config/action-mappings/action",
"addActionConfig",
"org.apache.struts.config.ActionConfig");
/*在遇到action/set-property 节点时,自动调用刚才创建的对象的设置方法
如<set-property property="c" value="d"/> 则刚才工厂方法创建的对象必须包含有方法 setC()
*/
digester.addSetProperty
("struts-config/action-mappings/action/set-property",
"property", "value");
digester可以用来解析xml信息为对象,这样就可以不用SAXParse方法来取xml然后进行解析,可以直接根据自定义规则来处理.stusts中就很好了使用digester
//实例化对象
Digester dig = new Digester();
//存入调用对象
dig.push(this);
//调置不校验
dig.setValidating(false);
//当遇到aa/bb/cc节点时 调用存入对象的methodTest方法,该方法参数为 2个
dig.addCallMethod("aa/bb/cc", "methodTest", 2);
dig.addCallParam("aa/bb/cc/a", 0);//入参1
dig.addCallParam("aa/bb/cc/b", 1);//入参2
//查找文件流
InputStream in = this.getClass().getResourceAsStream("/test/digester.xml");
try {
//解析
dig.parse(in);
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
//dig.addObjectCreate("aa/bb/cc", com.lins.test.dto.DigesterABC.class);
//创建工厂
dig.addFactoryCreate("aa/bb/cc", new FactoryClass());
dig.addSetProperties("aa/bb/cc");
//当到节点 aa/bb/cc/a时调用 setAa方法,把a的text()设置为值
dig.addBeanPropertySetter("aa/bb/cc/a","aa");
dig.addBeanPropertySetter("aa/bb/cc/b","bb");
dig.addSetNext("aa/bb/cc", "printStudent");
//dig.addRule("aa/bb/cc/set-property", new ABCRule());
dig.addSetProperty("aa/bb/cc/set-property", "property","value");
InputStream in = this.getClass().getResourceAsStream("/test/digester.xml");
try {
//返回调用对象
Test test = (Test)dig.parse(in);
System.out.println(test.stuList.size());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*当遇到 struts-config/data-sources/data-source 节点时进行创建DataSourceConfig对象
digester.addObjectCreate
("struts-config/data-sources/data-source",
org.apache.struts.config.DataSourceConfig.class);
*/
digester.addObjectCreate
("struts-config/data-sources/data-source",
"org.apache.struts.config.DataSourceConfig",
"className");
/*设置data-source 节点的属性,这个属性是上面创造的对象DataSourceConfig所具有的属性
如<data-source id="ss" /> 则 DataSourceConfig 这个对象就必须有setId这个方法*/
digester.addSetProperties
("struts-config/data-sources/data-source");
/* 当遇到 struts-config/data-sources/data-source 节点时,调用addDataSourceConfig方法,
*这个方法应该是 digester实例对象push的对象的方法 在struts里是moudleConfig
*/
digester.addSetNext
("struts-config/data-sources/data-source",
"addDataSourceConfig",
"org.apache.struts.config.DataSourceConfig");
/*当遇到data-source/set-property 节点时,调用 AddDataSourcePropertyRule的规则,
这个类要扩展rule抽象类
*/
digester.addRule
("struts-config/data-sources/data-source/set-property",
new AddDataSourcePropertyRule());
/*当遇到struts-config/action-mappings/action时,创建 ActionMappingFactory对象
* 这个对象扩展抽象类AbstractObjectCreationFactory,并且要实象抽象方法createObject产生一对象返回
*/
digester.addFactoryCreate
("struts-config/action-mappings/action",
new ActionMappingFactory());
/*同data-source*/
digester.addSetProperties
("struts-config/action-mappings/action");
/*同data-source*/
digester.addSetNext
("struts-config/action-mappings/action",
"addActionConfig",
"org.apache.struts.config.ActionConfig");
/*在遇到action/set-property 节点时,自动调用刚才创建的对象的设置方法
如<set-property property="c" value="d"/> 则刚才工厂方法创建的对象必须包含有方法 setC()
*/
digester.addSetProperty
("struts-config/action-mappings/action/set-property",
"property", "value");