`

Digester学习

阅读更多

     近来在学习tomcat的源码,其中有个解析XML的工具Digester,感觉很有意思,稍微研究了一下,今天先把写的例子弄上来,以后再讲一下Digester的原理和实现,总体感觉这个组件设计的很巧妙,重点当然是Pattern和Rule已经栈的使用了。

package org.apache.commons.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Vector;

import org.apache.commons.digester.Digester;
import org.xml.sax.SAXException;

public class DigesterStudents {
	private Vector<Student> students;
	
	public DigesterStudents(){
		students = new Vector<Student>();
	}
	
	public static void main(String[] args){
		DigesterStudents ds = new DigesterStudents();
		ds.digester();
	}
	
	private void digester(){
		Digester digester = new Digester();
		digester.push(this);
		
		digester.addObjectCreate("students/student", Student.class.getName());
		digester.addCallMethod("students/student/name", "setName",1);
		digester.addCallParam("students/student/name", 0);
		digester.addCallMethod("students/student/course", "setCourse",0);
		digester.addSetNext("students/student", "addStudents");
		digester.addSetProperty("students/student/set-name-property", "propertyName", "propertyValue");
		digester.addSetProperty("students/student/set-course-property", "propertyName", "propertyValue");
		
		try {
			InputStream in = this.getClass().getClassLoader()
				.getResourceAsStream("students.xml");
			DigesterStudents ds = (DigesterStudents)digester.parse(in);
			digester.setDebug(10);
			System.out.println(ds.students);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		}
	}
	
	public void addStudents(Student student){
		students.add(student);
	}
}

package org.apache.commons.test;

public class Student {
	private String name;
	private String course;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getCourse() {
		return course;
	}

	public void setCourse(String course) {
		this.course = course;
	}

	public String toString() {
		return ("Name=" + this.name + " & Course=" + this.course);
	}
}

<?xml version="1.0" ?>
<students>
	<student>
		<name>Java Boy</name>
		<course>JSP</course>
	</student>
	<student>
		<name>Java Girl</name>
		<course>EJB</course>
	</student>  
	<student>
		<set-name-property propertyName="name" propertyValue="Java Hobbies" />
		<set-course-property propertyName="course" propertyValue="Java Programming" />
	</student>
</students>


  • 大小: 44.8 KB
分享到:
评论
2 楼 asialee 2011-12-01  
cuitzyj 写道
jaxb直接搞定,比这个简单。 我也在tomcat源码,看到这个类时比较费解,不清楚它是如何做到的,thxs

这个我看过了Digester的源码,欢迎交流,还是比较简单的。
1 楼 cuitzyj 2011-11-30  
jaxb直接搞定,比这个简单。 我也在tomcat源码,看到这个类时比较费解,不清楚它是如何做到的,thxs

相关推荐

    digester学习笔记

    Apache Commons Digester 是一个用于处理XML文档的Java库,它允许开发者通过定义一系列规则来将XML数据映射到Java对象的属性或者创建新的Java对象。这个库特别适用于配置文件的解析,因为它简化了从XML到Java对象...

    Digester读取XML学习

    【标题】:“Digester读取XML学习” 在Java开发中,处理XML文件是常见的任务,尤其是在构建配置驱动的应用程序时。Apache Commons Digester是一个强大的工具,它允许开发者将XML文件解析为Java对象,通过匹配XML...

    Castor、digester实例

    Castor和Digester是两个在Java开发中用于对象与XML数据之间进行映射的库,它们简化了XML数据的解析和...通过上述实例,你应该对如何使用Castor和Digester有了基本的理解,但要完全掌握它们,还需要进一步的实践和学习。

    利用commons-digester解析xml

    标题“利用commons-digester解析XML”涉及到的是Java开发中的一种处理XML文档的工具——Apache Commons Digester。这个库提供了一种方便的方式...通过深入学习和使用,可以提升开发效率,并更好地管理项目中的XML资源。

    commons-digester源码

    通过研究`commons-digester3-3.0-src`源代码,开发者可以学习到XML解析的最佳实践,以及如何构建一个可扩展的、可定制化的XML处理框架。这对于任何希望提高Java XML处理技能的开发者来说都是宝贵的学习资源。

    commons-digester-1.7.zip

    2. **源代码**(如果包含):可能包括Java源文件,允许开发者查看和理解内部工作原理,便于学习、调试和扩展。 3. **文档**:可能有API文档(通常为Javadoc格式),提供了详细的接口和类的说明,帮助开发者了解如何...

    org.apache.commons.digester解析XML.rar

    Apache Commons Digester是一个Java库,专门用于将XML文档解析成对象结构。...为了更好地理解如何应用这个库,你可以解压并运行这个工程,查看其XML文件和对应的Java代码,学习如何设置和执行解析规则。

    digester(浅谈第一次使用)

    在第一次使用Digester时,开发者通常会经历学习如何设置规则、关联XML元素和Java类以及处理解析过程中的事件。 在“浅谈第一次使用”的描述中,可能涵盖了博主初次尝试使用Digester时的经验和遇到的问题,以及逐步...

    commons-digester-2.0.rar源文件及jar文件

    开发者可以通过查看源码来了解其内部实现细节,学习如何使用或者扩展该库。源代码通常包括以下几个目录: 1. `src/main/java`: 这里存放了所有的Java源代码,按照包结构组织。 2. `src/main/resources`: 可能包含...

    digester-rules

    标题“digester-rules”指的是Apache Commons Digester的规则配置,这是一个Java库,用于解析XML文档并基于预定义的规则自动创建和...在实际项目中,开发者通常会结合具体的代码示例和规则定义来学习和应用这个工具。

    commons-digester-1.8-src 下载 struts源码 digester

    在标签中再次强调了"commons-digester-1.8-src"和"struts源码",这可能意味着该压缩包不仅包含Digester的源代码,也可能包含了一个特定版本的Struts框架的源代码,方便开发者研究和学习两者如何协同工作。...

    quartz-1.6.0/commons-beanutils/commons-digester-1.7 JAR包

    在Java开发领域,Spring框架是应用极为广泛的轻量级框架,它提供了丰富的功能来简化企业级应用的开发。本文将围绕标题"quartz-1.6.0/commons-...理解并掌握这些工具的使用,对于深入学习和运用Spring框架是非常有益的。

    使用Digester解析XML文档示例

    ### 使用Digester解析XML文档示例 #### 一、Digester简介与应用场景 ...通过本篇示例的学习,读者可以了解到Digester的基本使用方法及其在实际开发中的应用,从而更好地利用这一工具解决XML解析问题。

    digester解析XML文件实例

    这个"digester解析XML文件实例"是一个很好的学习资源,帮助开发者理解如何在实际项目中运用Digester。 首先,我们要了解Digester的基本工作原理。Digester通过定义一系列规则(Rules),当解析到XML文档中特定的...

    利用digester来将xml转换为bean

    这个链接提供了详细的示例代码和解释,有助于进一步学习和解决实际问题。 Apache Commons Digester库不仅支持基本的属性映射,还提供了处理嵌套元素、处理子集合、执行自定义方法等多种功能。通过灵活配置,开发者...

    Commons-digester:规则引擎全实例

    了解 Commons Digester 的工作原理,可以深入研究其源码,学习如何实现规则引擎和对象堆栈管理。通过阅读源码,我们可以更好地理解库的内部机制,提高问题排查和定制能力。 六、最佳实践 1. 使用命名空间:为了...

    Commons-digesterXML解析Demo

    Apache Commons Digester是一个Java库,它提供了一种方便的方式来处理XML文档,并将其内容映射到Java对象模型上。...通过学习这个Demo,你可以掌握一种实用的XML解析技术,为你的Java项目带来便利。

    commons-jexl-2.0.rar

    - `src`: 源代码目录,开发者可以查看和学习JEXL的内部实现。 - `docs`: 文档目录,可能包含API文档、用户指南等,帮助开发者理解和使用JEXL。 - `examples`: 示例代码,演示了如何在实际项目中应用JEXL。 - `...

Global site tag (gtag.js) - Google Analytics