用Digester实现xml转换成bean

    项目中要用到解析配置文件的功能,google了一下,发现基本都是说用Digester的,正好工程中有这个jar包,所以可以用,研究了一下。Digester原来是struts1.x下面的jar,但由于解析xml到bean是个如此常用的功能,于是就分出来了,成为apache一个单独的项目了,它用纯java实现。试了一下,解析xml还是挺方便的。下面是我改写了官网提供的一个例子,基本覆盖常用的功能。

 

example.xml:

 

 

beans:

 

 

 

 

 

 

 

 

测试类:

 

 

简单说明一下,

1)当创建bean中的bean属性时,如AddressBook的Person对象,总是需要两步:

addObjectCreate

addSetNext

前者是告诉系统下面的元素会映射成一个对象,后者告诉系统用当前父对象的哪个方法将这个新的子对象添加进来,不能以addCallMethod代替,如果用了,会发现多个元素时,只有一个被添加了进去,原因我也不知道,文档讲得也不清楚.

 

2)读取attribute

   两种办法,一种是addSetProperties(),它会用xml中的attribute来设置bean上同名的property,如果两者名字不同怎么办,如例中xml里是birth,而bean中叫birthDay,用第二种办法addSetProperties("address-book/person","birth","birthDay");

 

3)将元素文本设置给bean的property

   我一般比较喜欢用addBeanPropertySetter,用addCallMethod也可以,不过要指定参数的个数,如果只有一个参数,那么个数用0表示,a little weird。

 

   另外,addSetNestedProperties这个方法可以将一组元素按钮元素名设置给bean的property,如:

 

 用addSetNestedProperties("address-book/person/address"),它会把这些子元素都作为property设置给address。

 

 如果想给bean设置一个常量的属性,addCallMethod之后用addObjectParam即可。Digester一点儿也难,多动手练习就会明白。

 

 是不是很简单?了解了原理,当xml结构变化时,可以简单地修改下代码就同步了,另外有种办法貌似是用xmlbeans,用annotation实现的,在一个项目中见过,不过没研究过。

 

官方例子:

http://svn.apache.org/viewvc/commons/proper/digester/trunk/src/examples/

 

需要的其它jar包,commons-logging,BeanUtils

如果想使用日志,定义个commons-logging.properties文件,附上以下内容:

 org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
  org.apache.commons.logging.simplelog.log.org.apache.commons.digester.Digester=debug
  org.apache.commons.logging.simplelog.log.org.apache.commons.digester.Digester.sax=info

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值