Digester转换xml到bean是比较方便的,但一个很常见的问题是,有时候同一种元素会出现在多个父元素下面,每次为它重写一遍映射的代码当然可以,但太麻烦了,有没有用正则表达式的方式匹配一下这种元素,达到只写一遍的目的呢,于是经过一番探索和邮件列表里的讨论,可以使用RegexRules、SimpleRegexMatcher来完成,不得不说,Digester的文档写得太差了,从文档里找不到任何使用它的方法。
xml:
config.xml
这个xml里有Mutable和Constant元素是可以在main或sub元素下同时出现的,而且对于TextTable元素,也可以换成ImgTable,下面的结构完全一样,这段xml是我从项目中摘出来的,作用是描述一些数据到表的映射,有文本表,图片表。
先看一下不用正则的方式如何写Constant和Mutable元素的映射:
对于TextTable一种,要分别写sub和main下面的,需要12行来完成,如果再加一种表ImgTable,又要12行,再加N个表,就是12N,非常恐怖吧。如果用正则表达式怎么写呢?
无论添加什么类型的表元素,就这6行就够了,因为无论哪种表,都是一样的结构,爽吧。
贴出用到的所有类。
ClassItem.java
ConstantProp.java
MutableProp.java
TableMap.java
解析类ConfigManager.java
运行时的截图:
Digester的基本使用请参见我的另一篇文章,http://blog.csdn.net/theoffspring/archive/2011/03/11/6241390.aspx, 听说Digester 3也快出来了,现在正在sandbox阶段,正在测试,支持if/else这样条件表达式,希望越来越好吧。