`
jxxms
  • 浏览: 105118 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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"?>


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);

分享到:
评论

相关推荐

    Jakarta-Common-Digester使用笔记

    Digester不是一个XML Parser,它只是对SAX更高层次上的一个封装使用Digester,将XML映射成javaBean. 我们无须了解SAX和DOM的解析过程,只要给Digester添加一些解析规则,就能对一个xml文件进行解析。Digester使用...

    jakartaee8-starter-boilerplate:一个样板项目,用于在几秒钟内启动Jakarta EE 8应用程序

    是一个样板项目,可帮助您在几秒钟内引导新的Java EE 8 / Jakarta EE 8应用程序。 如果要探索基于JSF,JAX-RS和MVC的真实世界的Jakarta EE 8应用程序,请检查从该项目派生的以下项目。建立确保已安装最新的JDK 8和...

    Jakarta common logging 简介 以及和其它日志系统结合使用

    NULL 博文链接:https://zhoujian1982318.iteye.com/blog/1703893

    适配Jakarta的FileUpload

    修改部分了源代码,可以无缝适配Jakarta,可以在Tomcat10或JAVAEE9以上使用,其参照版本为commons-fileupload-1.4

    Digester笔记

    首先Digester是什么,它是用来解析xml文件的的工具,是jakarta开源项目下commons的一个子项目,它能让程序员更方便的解析xml文件,而不需要了解底层的工作细节。 如果要使用Digester作为xml文件的解析,请到jakarta...

    (最全)Apache Jakarta Commons 工具集及其API

    网上找不全,官网资源又太分散,自己动手,丰衣足食,这是我挨个下载的Apache jakarta commons,有windows与linux两版本(全都有源码),甚至分离出去的HttpClient都在其中,愿更多的人了解并使用Apache,这是一个...

    jakarta.annotation-api-1.3.5-API文档-中文版.zip

    赠送jar包:jakarta.annotation-api-1.3.5.jar; 赠送原API文档:jakarta.annotation-api-1.3.5-javadoc.jar; 赠送源代码:jakarta.annotation-api-1.3.5-sources.jar; 赠送Maven依赖信息文件:jakarta.annotation...

    jakarta.validation-api-2.0.2-API文档-中文版.zip

    赠送jar包:jakarta.validation-api-2.0.2.jar; 赠送原API文档:jakarta.validation-api-2.0.2-javadoc.jar; 赠送源代码:jakarta.validation-api-2.0.2-sources.jar; 赠送Maven依赖信息文件:jakarta.validation...

    jakarta.servlet-api-4.0.4-API文档-中文版.zip

    赠送jar包:jakarta.servlet-api-4.0.4.jar; 赠送原API文档:jakarta.servlet-api-4.0.4-javadoc.jar; 赠送源代码:jakarta.servlet-api-4.0.4-sources.jar; 赠送Maven依赖信息文件:jakarta.servlet-api-4.0.4....

    jakarta.el-3.0.3-API文档-中文版.zip

    赠送jar包:jakarta.el-3.0.3.jar; 赠送原API文档:jakarta.el-3.0.3-javadoc.jar; 赠送源代码:jakarta.el-3.0.3-sources.jar; 赠送Maven依赖信息文件:jakarta.el-3.0.3.pom; 包含翻译后的API文档:jakarta.el...

    Digester 实例

    首先Digester是什么,它是用来解析xml文件的的工具,是jakarta开源项目下commons的一个子项目,它能让程序员更方便的解析xml文件,而不需要了解底层的工作细节。 Digester 解析xml文件 实例。

    jakarta commons-API

    jakarta commons的API

    jakarta.websocket-api-1.1.2-API文档-中文版.zip

    赠送jar包:jakarta.websocket-api-1.1.2.jar; 赠送原API文档:jakarta.websocket-api-1.1.2-javadoc.jar; 赠送源代码:jakarta.websocket-api-1.1.2-sources.jar; 赠送Maven依赖信息文件:jakarta.websocket-api...

    jakarta.activation-api-1.2.1-API文档-中英对照版.zip

    赠送jar包:jakarta.activation-api-1.2.1.jar; 赠送原API文档:jakarta.activation-api-1.2.1-javadoc.jar; 赠送源代码:jakarta.activation-api-1.2.1-sources.jar; 赠送Maven依赖信息文件:jakarta.activation...

    jakarta-commons 相关依赖包

    jakarta-commons 相关依赖包,文件列表: commons-attributes-api.jar commons-attributes-compiler.jar commons-beanutils.jar commons-codec.jar commons-collections.jar commons-dbcp.jar commons-digester.jar ...

    jakarta.el-3.0.3-API文档-中英对照版.zip

    赠送jar包:jakarta.el-3.0.3.jar; 赠送原API文档:jakarta.el-3.0.3-javadoc.jar; 赠送源代码:jakarta.el-3.0.3-sources.jar; 赠送Maven依赖信息文件:jakarta.el-3.0.3.pom; 包含翻译后的API文档:jakarta.el...

    jakarta.annotation-api-1.3.5-API文档-中英对照版.zip

    赠送jar包:jakarta.annotation-api-1.3.5.jar; 赠送原API文档:jakarta.annotation-api-1.3.5-javadoc.jar; 赠送源代码:jakarta.annotation-api-1.3.5-sources.jar; 赠送Maven依赖信息文件:jakarta.annotation...

    jakarta.servlet-api-4.0.4-API文档-中英对照版.zip

    赠送jar包:jakarta.servlet-api-4.0.4.jar; 赠送原API文档:jakarta.servlet-api-4.0.4-javadoc.jar; 赠送源代码:jakarta.servlet-api-4.0.4-sources.jar; 赠送Maven依赖信息文件:jakarta.servlet-api-4.0.4....

    jakarta.mail-1.6.7-API文档-中文版.zip

    赠送jar包:jakarta.mail-1.6.7.jar 赠送原API文档:jakarta.mail-1.6.7-javadoc.jar 赠送源代码:jakarta.mail-1.6.7-sources.jar 包含翻译后的API文档:jakarta.mail-1.6.7-javadoc-API文档-中文(简体)版.zip ...

Global site tag (gtag.js) - Google Analytics