在windows下开发程序,用M$提供的接口处理.ini文件或管理注册表的键值是非常方便的。在java平台上开发程序,则习惯于以xml格式的文件来存放系统的配置信息,对这种文件的解析和处理,可以用sax或 dom。有没有更简便的方法呢?有,就是用digester模块。

Digester是Jakarta 子项目Commons下的一个模块,支持基于规则的对任意XML文档的处理。它最初是Structs项目的一部分,后因其通用性而划归Commons.

password: anoncvs

cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic checkout jakarta-commons/digester

cd jakarta-commons/digester

ant dist

Digester的运行依赖下列包:

public class Foo {

public void addBar(Bar bar);

public Bar findBar(int id);

public Iterator getBars();

public String getName();

public void setName(String name);

}

public mypackage;

public class Bar {

public int getId();

public void setId(int id);

public String getTitle();

public void setTitle(String title);

}

用下面的xml文件进行配置

用下面几行代码即可完成配置文件解析工作:

Digest解析代码

注释

Digester digester = new Digester();

digester.setValidating(false);

不进行XML与相应的DTD的合法性验证

digester.addObjectCreate("foo", "mypackage.Foo");

当遇到时创建一个mypackage.Foo对象,并将其放在栈顶

digester.addSetProperties("foo");

根据元素的属性(attribute),对刚创建的Foo对象的属性(property)进行设置

digester.addObjectCreate("foo/bar", "mypackage.Bar");

当遇到的子元素时创建一个mypackage.Bar对象,并将其放在栈顶。

digester.addSetProperties("foo/bar");

根据元素的属性(attribute),对刚创建的Bar对象的属性(property)进行设置

digester.addSetNext("foo/bar", "addBar", "mypackage.Bar");

当再次遇到的子元素时创建一个mypackage.Bar对象,并将其放在栈顶,同时调用第二栈顶元素(Foo对象)的addBar方法。

Foo foo = (Foo) digester.parse();

分析结束后,返回根元素。

使用Digester,须按照以下步骤:

具体说来,元素和其子元素间,用”/”相隔,如果一些元素前没有”/”则其必为根元素。如例:

       -- 匹配模板 "a/b"

-- 匹配模板 "a/b/c"

-- 匹配模板 "a/b/c"

       -- 匹配模板 "a/b"

-- 匹配模板 "a/b/c"

-- 匹配模板 "a/b/c"

-- 匹配模板 "a/b/c"

字符”*”表示任意级别,如”*/a”表示任意级别的都可匹配(不包括根元素级的).熟悉XLST的朋友,对这种思路一定不陌生。

从上面的描述,可知某个元素同时满足多个匹配模板是非常可能的,在这种情况下,与各个模板相关联的处理规则(processing rule)的执行顺序如下:对begin或body方法,按照各个rule的注册顺序的先后,对end方法则是注册顺序的反序。

从形式上讲,一个处理规则是一个java类,它扩展了org.apache.commons.digester.Rule类。每个处理规则,实现下列的一个或几个事件处理方法(event method),当相应的模板匹配成功以后,在已定义的某个时刻,这些事件方法会被触发。

在设置digester时,通过调用addRule()方法,来注册一个特定的元素匹配模板以及相应的一个Rule类的实例。如上所述,Rule类中的事件处理方法,会在适当的时间被调用。这个机制,允许动态地生成Rule的实现。

另外,digester也提供了一些处理常见情况的处理规则类。

对这些标准的规则类,可以创建它们的实例,并调用digester.addRule来注册它们。由于经常使用它们,所以digester定义了一些简便的方法来注册它们。如:

digester.addRule("a/b/c", rule);

java digester_Digester学习笔记(一)相关推荐

  1. Java NIO 学习笔记(三)----Selector

    目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...

  2. 可能是最全面的 Java G1学习笔记

    转载自 可能是最全面的 Java G1学习笔记 引子 最近遇到很多朋友过来咨询G1调优的问题,我自己去年有专门学过一次G1,但是当时只是看了个皮毛,因此自己也有不少问题.总体来讲,对于G1我有几个疑惑 ...

  3. 深入浅出 Java CMS 学习笔记

    转载自  深入浅出 Java CMS 学习笔记 引子 带着问题去学习一个东西,才会有目标感,我先把一直以来自己对CMS的一些疑惑罗列了下,希望这篇学习笔记能解决掉这些疑惑,希望也能对你有所帮助. 1. ...

  4. Java NIO学习笔记之图解ByteBuffer

    转载自 Java NIO学习笔记之图解ByteBuffer ByteBuffer前前后后看过好几次了,实际使用也用了一些,总觉得条理不够清晰. <程序员的思维修炼>一本书讲过,主动学习,要 ...

  5. 转载:mongoDB java驱动学习笔记

    http://www.blogjava.net/watchzerg/archive/2012/09/22/388346.html mongoDB java驱动学习笔记 指定新mongo实例: Mong ...

  6. 2019年Java Web学习笔记目录

    Java Web学习笔记目录 1.Java Web学习笔记01:动态网站初体验 2.Java Web学习笔记02:在Intellij里创建Web项目 3.Java Web学习笔记03:JSP元素 4. ...

  7. 【Java基础学习笔记】- Day11 - 第四章 引用类型用法总结

    Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 4.1 class作为成员变量 4.2 interface作为成 ...

  8. Java 虚拟机学习笔记 | 类加载过程和对象的创建流程

    前言 创建对象是 Java 语言绕不开的话题,那么对象是如何创建出来的呢?我们今天就来聊一聊.对象创建第一步就是检查类是否加载,而类的加载又牵扯到类的加载过程.如果单说对象的创建而绕开类的加载过程,感 ...

  9. Java中大数据数组,Java基础学习笔记之数组详解

    摘要:这篇Java开发技术栏目下的"Java基础学习笔记之数组详解",介绍的技术点是"java基础学习笔记.基础学习笔记.Java基础.数组详解.学习笔记.Java&qu ...

  10. Java IO学习笔记总结

    Java IO学习笔记总结 前言 前面的八篇文章详细的讲述了Java IO的操作方法,文章列表如下 基本的文件操作 字符流和字节流的操作 InputStreamReader和OutputStreamW ...

最新文章

  1. AI一周热闻:GitHub免费开放无限私有库;苹果市值蒸发超450亿美元;小米入股TCL...
  2. 【转帖】dopod touch diamond 应用小常识:)
  3. adguard没有核心 core no_业主装修最后悔的五个地方!没有之一
  4. Python-第三方库requests详解
  5. 关于程序员的脑筋急转弯(附答案)
  6. 单调栈思维 2021年度训练联盟热身训练赛第三场——K题 Summer Trip
  7. 封装EF code first用存储过程的分页方法
  8. USACO-Section1.3 Milking Cows (区间问题)
  9. 计算机视觉空间域(spatial)注意力机制——CBAM
  10. FontAwesome图标大全
  11. sublime test3 php语法错误高亮
  12. 确认OHS版本的方法
  13. aect17定义_美AECT日前发布新的教育技术定义
  14. 2、深入HTTP请求流程
  15. React State
  16. python dis模块
  17. 百度OCR识别图片文字,解决image format error错误
  18. Vue3 项目遇到的问题
  19. 数据结构与算法:实验报告(串及其应用)
  20. 基于html+css+js的图书管理系统

热门文章

  1. STM32F4xx固件库分析
  2. 在普通用户下进入root用户
  3. 010 Editor逆向分析文档
  4. ESP8266固件烧录软件flash_download_tools的安装过程
  5. linux ftps ftp,Linux下ftp+SSL实现ftps
  6. 简单明了的线程生命周期图
  7. 74ls20设计半加器_实验二++组合逻辑电路的设计与测试.ppt
  8. C++ 虚函数和虚函数表
  9. [学科总结] 《线性系统理论》
  10. YDUI Touch +mescroll上拉加载测试