Jakarta Common Digester 应用

<script type="text/javascript"> google_ad_client = "pub-8800625213955058"; /* 336x280, 创建于 07-11-21 */ google_ad_slot = "0989131976"; google_ad_width = 336; google_ad_height = 280; // </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> Jakarta Common Digester 应用 1 什么是 Common Digester Jakarta Common Digester 是一套 XML to Object 的 API,它可以将XML文件转换为任意的Java对象,并且提供灵活的扩展接口。 2 原理 2.1 简单的例子 将以下 XML 文件构造成 ArrayList; <?xml version="1.0" encoding="ISO8859_1"?> <list> <bean id="1111" description="abc"/> <bean id="2222" description="bcd"/> </list> Bean 类 public class Bean { private String id; private String description; public void setId(String id) { this.id = id; } public String getId() { return id; } public void setDescription(String description) { this.description = description; } public String getDescription() { return description; } } Digester digester = new Digester(); digester.addObjectCreate("list", ArrayList.class): digester.addObjectCreate("list/bean" Bean.class); digester.addSetProperties("list/bean"); digester.addSetNext("list/bean", "add"); /*TODO: Load xml file as stream*/ InputStream is = null; ArrayList list = (ArrayList) digester.parse(is); 2.2 Digester 的处理过程 (Rule, XPath, Object Stack) 首先为 Digester 指明处理规则, 每种处理规则都要匹配 XPath,如下: digester.addObjectCreate("list", ArrayList.class): digester.addObjectCreate("list/bean" Bean.class); digester.addSetProperties("list/bean"); digester.addSetNext("list/bean", "add"); 注意,上述程序并不是处理 XML 文档,而且指明如何处理 XML 文档 然后,Digester 开始解析 XML 文档 digester.parse(is); Digester 遍历整个 DOM 树, 当遇到一个元素时,便找到与该元素路径匹配的 Rule,并调用这个 Rule 来处理该元素。 Rule 使用 Digester 的 Object Stack 来使用或存放中间处理过程产生的对象。当整棵数遍历完毕时,Object Stack 栈底的对象即为最后结果对象。 2.3 使用 Digester 内建的规则 ObjectCreate SetNext SetProperties SetProperty CallMethod FactoryCreate 2.4 使用自定义的规则 对于第一个例子,不使用内建的规则,而使用自定的规则处理,用于演示自定义规则的用法 public class ListRule extends Rule { public void begin(String namespace, String name, Attributes attributes) throws Exception { /*将一个新的 ArrayList 对象放入 Object Stack 中*/ digester.push(new ArrayList()); } } public class BeanRule extends Rule { public void begin(String namespace, String name, Attributes attributes) throws Exception { /*取出栈顶的对象,当处理该规则时,栈顶应该是 ArrayList*/ ArrayList list = (ArrayList) digester.peek(); Bean bean = new Bean(); bean.setId(attributes.getValue("id")); bean.setDescription(attributes.getValue("description")); list.add(bean); } } Digester digester = new Digester(); digester.addRule("list", new ListRule()): digester.addRule("list/bean" new BeanRule()); /*TODO: Load xml file as stream*/ InputStream is = null; ArrayList list = (ArrayList) digester.parse(is);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值