`
macken
  • 浏览: 341868 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Common Digester学习

    博客分类:
  • Java
 
阅读更多

Digester类用来将XML映射成Java类,简化XML的处理。它是Apache Commons库中的一个jar包:common-digester包

引用方式import org.apache.commons.digester.Digester; 

Digester类通过模式(pattern)和规则来处理XML文档。其中的模式必须匹配XML元素,即XML文档树中的节点名和位置。Digester匹配模式的语法类似XPath的匹配模式,如模式catalog匹配最顶层<catalog>,模式catalog/book匹配<catalog>节点的子节点<book>。所有的匹配都是绝对路径,即所有的路径都是从根元素开始向下被指定的,有一个例外,几句是包含通配符"*"的匹配模式,如模式*/name将匹配XML文档中的任何<name>节点。

为了处理XML文档,需要建立一个org.apache.commons.digester.Digester类实例,并进行配置,指定相关的模式和规则,最后将XML文件的引用传入parse方法。

Digester的实现方式,依次读入XML文件,采用堆栈残存储实例,从父节点开始读入,创建父节点对应的实例压入堆栈,当读到结束标志时弹出堆栈,读到子节点,创建子节点对应实例压入堆栈,因此可以看出次栈顶实例是栈顶实例的父节点,同级的节点点之间没有关联关系。

以userdatabase.xml文件为例,说明Digester的常用方法

 

<?xml version="1.0" encoding="UTF-8?>
<database>
	<user userName="guest" password="guest">
	</user>
</database>

1.addObjectCreate(String rule,Class class)

设置节点与Java对象的映射规则,rule指定节点的筛选规则,class设置映射对象。SAX解析时,遇到rule指定的节节点,会创建一个class实例放入堆栈中。

比如:digester.addObectCreate("database/user","com.model.UserBean").解析遇到user节点时,会创建一个UserBean实例并放入堆栈中。

2.addSetProperties(String rule)

设置节点的属性设置规则。当解析遇到符合rule的节点时,根据属性列表中的属性值对,使用Java反射机制使用标准的JavaBean方法设置栈顶对象实例;

比如:digester.addSetProperties("database/user"),解析遇到user节点时,会获取键值对 userName=guest,password=guest,获得栈顶的UserBean对象,设置实例的userName、password属性;

3.addBeanPropertySetter(String rule)

该方法的作用及使用方法类似于addSetProperties,只不过它是用rule所指定的标签来调用对象的setter。

4.addSetNext(String rule,String methodName)

设置当前rule节点与父节点的调用规则,当遇到rule节点时,调用堆栈中的次栈顶元素调用methodName方法。将栈顶元素作为次顶元素指定方法的输入参数。

比如:digester.addSetNext("database/user","addUser"),调用database实例的addUser,user为参数

5.addCallMethod(String rule,String methodName,int paraNumber)

该方法同样设置对象的属性,但更加灵活,不需要对象具有setter

根据rule规则指定的属性,调用对象的methodName方法,paraNumber参数是表示方法需要的参数个数,当paraNumber=0时,可以单独使用,不然需要配合addCallParam方法

比如:digester.addCallMethod("database/user/uerName","setUserName",0);

6.addCallParam(String rule,int paraIndex,String attributeName)

该方法与addCallMethod配合使用,根据rule指定的标签属性来调用方法

paraIndex表明需要填充的方法形参序号,从0开始,方法由addCallMethdo指定,attributeName指定标签属性名;

 

使用注意事项:
   1.Digester
类调用的顺序,必须与XML数据文件绝对一致;
   2.Digester
类依赖于JavaBean规范,类必须符合规范;
   3.XML
文件中标签/属性的名称必须与Bean中的一致(包括大小写);

 

 

参考资料:

Apache Common Library:http://commons.apache.org

http://tech.it168.com/jd/2007-10-23/200710221641906_2.shtml

http://www.blogjava.net/tw-ddm/archive/2006/07/20/59299.html

http://blog.163.com/xubindehao@126/blog/static/10821904420094113254642/

http://www.blogjava.net/yql225521/articles/62212.html

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics