常用jar包之commons-digester使用

配置Apache Digest认证 Digest认证 服务器为每个连接生成唯一随机数,Client用该随机数对mi'ma'jia'mi 阅读详情

 digester组件简化了xml文件处理操作,能将xml文件按照事先确定的规则(采用编码形式或xml配置文件形式),映射成java对象。digester组件现在最新版本是2.0,它所依赖的组件是:commons-logging(推荐1.1版本),BeanUtils(推荐1.8版本),还有需要jdk1.5.


基本概念
1. 在Digester的内部采用SAX来解析XML文件。为了能够正确的使用它,必须在解析之前进行相应的设置。同时,在解析xml文件的过程中,它使用Stack来保存和检索这个期间产生的对象.
2. 为了简化使用,它通过匹配模式来定位要解析的xml标签。匹配模式的例子如下:
<?xml version="1.0"?>
<students>
 <student>
 <name>Tom</name>
 <course>JSP</course>
 </student>
 <student>
 <name>Mary</name>
 <course>J2EE</course>
 </student>
</students>
每个标签与相应的匹配模式对应如下表:
标签              匹配模式
<students> students
<student>  students/student
<name>     students/student/name
<course>   students/student/course
3. 使用匹配模式可以很方便的定位需要处理的元素,为了处理这些元素,需要定义处理规则。规则在匹配模式被找到时起作用。所有的规则都是从org.apache.commons.digester.Rule派生的。所有已定义的Rule对象,可以在org.apache.commons.digester中找到。
常用的规则:
- ObjectCreate,创建对象实例。
- SetProperties,将标签属性(Attribute)与要创建的对象的属性相关联。
- BeanPropertySetter,将标签所包含标签与要创建的对象的属性相关联。
- SetNext,设置遇到下一个标签时的动作。
- CallMethod,设置当匹配模式被找到时要调用的方法。
- CallParam,设置对应的callMethod中指定方法所需要的参数值。


基本使用
以正确的顺序调用Digester方法是成功使用Digester处理XML文件的关键。使用步骤如下:
1. 创建org.apache.commons.digester.Digester实例并配置,包括设置实现Digester Rule的对象。
2. 使用Digester的push方法在Digester使用的stack中放置一个初始对象。在解析xml文件的过程中,Digester使用stack来保存它所找到的对象。第一个对象在遇到第一个标签时被放置到stack中,当最后一个标签处理完毕时被弹出。为了最后能检索到这个对象,因此需要一个初始对象来保留一个指向它的引用。
3. 注册匹配模式和rule。
4. 调用parse来解析xml文件。


使用举例
1.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<students>
 <student>
 <name>Tom</name>
 <course>JSP</course>
 </student>
 <student>
 <name>Mary</name>
 <course>J2EE</course>
 </student>
</students>
2.硬编码形式实现
Student类
package com.tongda.whl.digester;
public class Student {
 private String name;
 private String course;
 public void setName(String name){
  this.name=name;
 }
 public void setCourse(String course){
  this.course=course;
 }
 public String getName(){
  return this.name;
 }
 public String getCourse(){
  return this.course;
 }
}
处理类

结果显示:Tom
3.配置文件方式实现
 配置文件:studentsRule.xml
 <?xml version="1.0"?>
<digester-rules>
 <pattern value="students">
 <object-create-rule classname="com.tongda.whl.digester.Students" />
 <set-properties-rule />
 <pattern value="student">
 <object-create-rule classname="com.tongda.whl.digester.Student" />
 <bean-property-setter-rule pattern="name"/>
 <bean-property-setter-rule pattern="course"/>
 <set-next-rule methodname="addStudent" />
 </pattern>
 </pattern>
</digester-rules>
Student类
package com.tongda.whl.digester;
public class Student {
 private String name;
 private String course;
 public void setName(String name){
  this.name=name;
 }
 public void setCourse(String course){
  this.course=course;
 }
 public String getName(){
  return this.name;
 }
 public String getCourse(){
  return this.course;
 }
}
Students类
package com.tongda.whl.digester;
import java.util.Vector;
public class Students {
  private Vector students;
  public Students(){
   students= new Vector(5);
 }
  public void addStudent( Student student){
   students.add( student);
  }
  public String toString(){
     return ((Student)students.get(0)).getName();
  }
}
处理类

结果显示:Tom


在使用Digester需要注意的地方:
1- 调用顺序,正确的调用顺序才能得出正确的结果。方法调用顺序基本和标签在xml文件中的层次关系相对应。基本的顺序是:先创建对象;然后设置属性;随后处理子元素;最后设置遇到下一个元素所对应的动作。对于子元素的处理,是同样的过程。
2- 正确的使用初始对象。对比上面2个例子,之所以在第一个例子中显示的调用了digester的push方法,其原因就在于我们并没有如第二个例子一样用xml的root元素创建一个实例。如果不显式的调用,我们将会丢失这个元素的引用,那么也就无法得到后续的对象。
3- digester的addSetNex方法中所指定的方法实际上是包含匹配模式对应标签的父标签对应对象的方法。在上两个例子中addStudent,都是包含Student对象的那个对象的方法。对于第一个例子,是DigesterTest;对于第二个例子,是Students。而且它的位置通常是在创建对象语句组的最后,与addObjectCreate相对应。在这2个语句之间的代码中所指定的方法都是所创建对象的方法。而且它们的顺序与匹配模式所对应的标签的顺序必须是一致的。
4- 使用配置文件来创建digester,这样会带来很大的灵活性。

 

使用Apache的Digester来解析XML文档 使用Apache的Digester来解析XML文档,代码,有解析! 立即下载

相关推荐

commons-digester.jar

如果遇到错误java.lang.NoClassDefFoundError: org/apache/commons/digester/RuleSet就下载这个包

Apache Commons Digester(Digester2.0)学习笔记

digester组件简化了xml文件处理操作,能将xml文件按照事先确定的规则(采用编码形式或xml配置文件形式),映射成java对象。digester组件现在最新版本是2.0,它所依赖的组件是:commons-logging(推荐1.1版本),BeanUtils(推荐1.8版本),还有需要jdk1.5.基本概念1. 在Digester的内部采用SAX来解析XML文件。为了能够正确的使用它,必须在

都市小混混 4469

SPSS实战:如何用Harman单因素检验搞定共同方法偏差(附完整操作步骤)

本文提供了一份详尽的SPSS实战指南,手把手教你运用Harman单因素检验来诊断共同方法偏差。文章从核心概念讲起,逐步详解数据准备、SPSS操作步骤、结果解读与报告撰写,帮助研究者快速掌握这一关键的数据质量控制方法,确保量化研究结论的可靠性。

weixin_29263201的博客 1692

Commons-Digester简介

Digester本来仅仅是Jakarta Struts中的一个工具,用于处理struts-config.xml配置文件。显然,将XML文件转换成相应的Java对象是一项很通用的功能,这个工具理应具有更广泛的用途,所以很快它就在Jakarta Commons项目(用于提供可重用的Java组件库)中有了一席之地。简言之,Digester由"事件"驱动,通过调用预定义的规则操作对象栈,将XML文件转

klyun的专栏 1734

GD32F103RCT6/GD32F303RCT6(6.2)USART串口实战:从寄存器配置到DMA高效传输

本文详细介绍了GD32F103RCT6和GD32F303RCT6的USART串口通信实战,从寄存器配置到DMA高效传输的全过程。通过具体的代码示例和优化建议,帮助开发者快速掌握串口通信的关键技术,提升嵌入式开发效率。特别强调了DMA在高速数据传输中的优势和应用技巧。

weixin_33725239的博客 308

【无人机设计与控制】基于PID控制的四旋翼无人机系统Matlab仿真

本文设计并仿真了基于PID控制的四旋翼无人机系统。首先,建立了四旋翼无人机的数学模型,涵盖了无人机的动力学和控制系统。通过PID控制器对四旋翼的姿态和位置进行控制,以实现其稳定飞行。使用MATLAB/Simulink对该系统进行仿真,验证了PID控制算法在四旋翼控制中的有效性。仿真结果表明,PID控制能够较好地调节四旋翼的飞行姿态,并有效抑制外部干扰,使得无人机能够保持平稳飞行。

2401_84610415的博客 1804

java开发常用到的jar包总结

<!-- p {margin-bottom:0.08in} --> <!-- p {margin-bottom:0.08in} --> <!-- p {margin-bottom:0.08in} --> java开发中主要用到的jar包介绍 commons-io.jar: 可以看成是java.io的扩展,用来帮助进行IO

chaod5659的专栏 1万+

RJ45以太网接口EMC设计方案

RJ45以太网接口EMC设计方案 一、 接口概述 RJ45以太网接口是目前应用最广泛的通讯设备接口,以太网口的电磁兼容性能关系到通讯设备的稳定运行。赛盛技术应用电磁兼容设计平台(EDP)软件从接口原理图、结构设计,线缆设计三个方面来设计以太网口的EMC设计方案。 二、 接口电路 原理图的EMC设计 百兆以太网接口2KV防雷滤波设计 图1 百兆以太网接口2KV防雷滤波设计 接口电路设计概述: 本方案从EMC原理上,进行了相关的抑制干扰和抗敏感度的设计;从设计层次解决EMC问题;同时此电路兼容了百兆以太网接

兰陵笑笑生SD的博客 1万+

java开发常用的jar包的作用解释

转载自:http://blog.csdn.net/chaod5659/article/details/8250845 java开发中主要用到的jar包描述 commons-io.jar: 可以看成是java.io的扩展,用来帮助进行IO功能开发.它包含三个主要的领域:Utilityclasses-提供一些静态方法来完成公共任务.Filters-提供文件过滤器的各种实现.S

HN刘宗亮的专栏 3838

避坑指南:为什么你的conda环境装不上Mamba?从CUDA到ABI的深度排查

本文深入解析conda环境中安装Mamba架构时常见的CUDA版本冲突、ABI不匹配等问题,提供从基础检查到深度排查的系统化解决方案。针对`causal-conv1d`和`mamba-ssm`安装失败场景,详细讲解PyTorch版本绑定、编译器工具链兼容性等关键技术要点,并给出预编译wheel选择、动态链接库配置等实用修复方案。

weixin_33738555的博客 345

1976国际标准大气_Matlab

输入高度,计算空气密度、气压、温度、声速 function [airDens,airPress,temp,soundSpeed]=Atmos(geomAlt) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 1976 U.S Standard Atmosphere Interpolation % % Note: Function does not extr.

JISANSAN的博客 1万+

java中常用jar包

commons-io.jar:可以看成是java.io的扩展,用来帮助进行IO功能开发.它包含三个主要的领域:Utilityclasses-提供一些静态方法来完成公共任务.Filters-提供文件过滤器的各种实现.Streams-提供实用的Stream,reader与writer实现.commons-beanutils.jar:提供对Java反射和自省API的包装,主要提供了对于 JavaBean...

weixin_30699463的博客 137

华为OD机试双机位C卷-几何平均值最大子数组(Py/Java/C/C++/Js/Go)

华为OD机试(机考)2026双机位C卷 【几何平均值最大子数组】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【几何平均值最大子数组】。

qq_45776114的博客 1366

框架中常用的jar包作用

框架中常用的jar包作用 commons-digester.jar Digester基于规则的XML文档解析,主要用于XML到Java对象的映射. commons-beanutils.jar 提供对Java 反射和自省API的包装. aspectjweaver.jar 用于在Spring 2.0中集成AspectJ AspectJ LTW织入器 ognl.jar...

jzgl_cadn的专栏 165

c#视觉应用开发中如何使用Emgu CV在C#中进行图像处理?

Emgu CV 是 OpenCV 的 .NET 包装器,可以让开发者在 .NET 语言(如 C#)中使用 OpenCV 的功能进行图像处理。在进行图像处理时,Emgu CV 提供了丰富的 API 可以使用。PictureBoxImageBox下面是一个详细的示例,演示如何使用 Emgu CV 在 C# 中进行基本的图像处理,包括加载图像、转换为灰度图像、进行边缘检测,然后显示结果。byte在这个示例中,我们使用了三个PictureBox控件来显示原始图像、灰度图像和边缘检测后的图像。

zhangzhechun的专栏 666

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

配置struts必须具备的JAR包

myeclipse可以添加struts1.2等libraries其中包含 apache公司写了一系列的工具包,比如comm-XXXXX这些呢都是可以独立的,而struts.jar是依存这些的, 比如说commons-collections.jar是扩展了集合框架的一个工具包,commons-beanutils.jar是对javaBean操作的一个工具包,commons-lang.jar扩展了ja...

wubiao123551的博客 176

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java架包大全_jar架包

commons-digester.jarDigester基于规则的XML文档解析,主要用于XML到Java对象的映射.commons-beanutils.jar提供对Java 反射和自省API的包装.aspectjweaver.jar用于在Spring 2.0中集成AspectJ AspectJ LTW织入器ognl.jarOGNL是Object-Graph Navigation Language...

weixin_34379088的博客 910

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

struts2浅谈其jar包

antlr-2.7.2    一种工具,它可以接受词文法语言描述,并能产生识别这些语言的语句的程序asm-3.3    操作java字节码的类库asm-commons-3.3    提供了基于事件的表现形式asm-tree-3.3    提供了基于对象的表现形式classworlds-1.1    基于java操作类装载的开发框架。java的classloader的机制和本地类可以引起头痛,多为某些类型的应用程序开发的混乱jakarta commons项目中的一个子项目。

2401_84048445的博客 831
上一篇: 串口和并口的区别
下一篇: 主板的北桥芯片与南桥芯片
terryzero
博客等级 码龄19年 700粉丝 232原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值