Digester由"事件"驱动,通过调用预定义的规则操作对象栈,将XML文件转换为Java对象。
对使用者而言,Digester的核心在于匹配模式与规则(matching pattern + rule)。
其实就两点:
1、用一个XML文件定义Java对象的状态(数据源文件),
2、另一个XML文件定义装载数据源文件的装载逻辑
场景:
CRM要调用帐管的接口查帐单,由于帐管接口未定下来,或者经常变动。
所以先定义好帐单类,因为展示形式相对固定,所以可以先定义好类。
然后
String result = external2Oss.ossRequest(param);//帐管返回的帐单字符串
if (param.getRequestNo()==5) {
result="<?xml version='1.0' encoding='GBK'?><oss-response> <BillInfo billCycle='20070701_20070801' totalCharge='130.0' unpaymentCharge='130.0' thisCharge='130.0' prepayCharge='0.0' adustmentCharge='0.0' freeCharge='0.0'></BillInfo></oss-response>";
}
String clsName = t.getName().replaceAll("\\.", "/") + ".xml";
URL rulesURL = t.getClassLoader().getResource(clsName);
Digester d = DigesterLoader.createDigester(rulesURL);
d.push(obj);
InputStream is = new ByteArrayInputStream(result.getBytes("GBK"));
d.parse(is);
这样,以后改了接口的时候只要修改XML即可。
应用场景:
1.appframe解析defaults.xml
at org.apache.commons.digester.Digester.parse(Digester.java:1666)
at com.ai.appframe2.complex.xml.XMLHelper.createDefaults(XMLHelper.java:304)
at com.ai.appframe2.complex.xml.XMLHelper.getInstance(XMLHelper.java:79)
at com.ai.appframe2.service.ServiceFactory.<clinit>(ServiceFactory.java:27)
2.tomcat解析server.xml
catalina.java
protected Digester createStartDigester() {
long t1=System.currentTimeMillis();
// Initialize the digester
Digester digester = new Digester();
digester.setValidating(false);
digester.setRulesValidation(true);
HashMap<Class, List<String>> fakeAttributes = new HashMap<Class, List<String>>();
ArrayList<String> attrs = new ArrayList<String>();
attrs.add("className");
fakeAttributes.put(Object.class, attrs);
digester.setFakeAttributes(fakeAttributes);
digester.setClassLoader(StandardServer.class.getClassLoader());
// Configure the actions we will be using
digester.addObjectCreate("Server",
"org.apache.catalina.core.StandardServer",
"className");
digester.addSetProperties("Server");
digester.addSetNext("Server",
"setServer",
"org.apache.catalina.Server");
digester.addObjectCreate("Server/GlobalNamingResources",
"org.apache.catalina.deploy.NamingResources");....
分享到:
相关推荐
资源为Digester的xml解析应用案例,
digester
解析使用的xml文件在"参与者基础数据-4月.zip",sql语句就不贴了,如果是测试digester只需将dao层改一下,不要连接数据库,不同数据库创表好麻烦,如果需要存入数据库可以自行创建。
Castor、digester实例 Castor、digester实例 Castor、digester实例
用Digester開發的一個小程序。
首先Digester是什么,它是用来解析xml文件的的工具,是jakarta开源项目下commons的一个子项目,它能让程序员更方便的解析xml文件,而不需要了解底层的工作细节。 Digester 解析xml文件 实例。
Digester java解析xml jar包
赠送jar包:commons-digester3-3.2.jar; 赠送原API文档:commons-digester3-3.2-javadoc.jar; 赠送源代码:commons-digester3-3.2-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
Digester使用堆栈来保存xml节点(stack.push()方法),当该xml节点中嵌套的所有子节点解析完毕,该节点将被弹出(stack.pup()方法)。Digester最大的优点就是使用模式匹配来表示xml文件中节点之间的父子关系 。
赠送jar包:commons-digester3-3.2.jar; 赠送原API文档:commons-digester3-3.2-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。
不错的解析XML的类,主要利用org.apache.commons.digester.Digester;
digester3.2 源码 and digester3.2 application sample
此为官网版本的commons-digester-2.1.jar maven中下载的commons-digester-2.1.jar无法使用
Digester读取xml教程.rar
digester解析xml的全套组件,分别为digester-1.8, collections-3.2, beanutils-1.7.0, logging- <br>1.1.1。...另外,jar <br>和源码已分开,如要在eclipse中查看源码,可直接attach我打包好的src.zip。
首先Digester是什么,它是用来解析xml文件的的工具,是jakarta开源项目下commons的一个子项目,它能让程序员更方便的解析xml文件,而不需要了解底层的工作细节。 如果要使用Digester作为xml文件的解析,请到jakarta...
Digester的XML规则文件配置...在Digester中提供了一个包:org.apache.commons.digester.xmlrules。这个包中的类可以从一个XML文档中读取并返回一个指定的配置信息。XML文档配置文件必须使用DTD,这是xmlrules包的一部分
commons-digester-2.0.rar源文件及jar文件
赠送jar包:commons-digester-1.8.1.jar; 赠送原API文档:commons-digester-1.8.1-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。
commons-digester.jar