`
bearjava
  • 浏览: 82247 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

XML解析之Digester

    博客分类:
  • Java
阅读更多
Digester package lets you configure an XML -> Java object mapping module, which triggers certain actions called rules whenever a particular pattern of nested XML elements is recognized. A rich set of predefined rules is available for your use, or you can also create your own.

映射XML对象
public class User {

	private int id;
	private String name;
	private int age;
	private String sex;
	
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	
	public String toString(){
		return "user: "+name+" "+sex;
	}
}


模拟用户注册表
public class UserRegistry {
	
	java.util.List<User> registry = new ArrayList<User>();

	public void register(User obj) {
		registry.add(obj);
	}

	public List<User> getRegistry() {
		return registry;
	}
	
	public void printRegistry(){
		for(int i =0;i<registry.size();i++){
			User user = registry.get(i);
			System.out.println(user);
		}
	}
}

Digester提供code解析和rule解析
public class DigesterParse {

	static File file = new File("user.xml");
	static File rule = new File("rule.xml");

	public static void main(String[] args) {
		System.out.println("*******Digester parsing by Code******");
		parseByCode().printRegistry();
		System.out.println("*******Digester parsing by Rule******");
		parseByRule().printRegistry();
	}

	public static UserRegistry parseByCode() {
		UserRegistry regs = null;
		InputStream input = null;
		Digester digester = null;
		try {
			input = new FileInputStream(file);
			digester = new Digester();
			// 不进行XML与相应的DTD的合法性验证
			digester.setValidating(false);
			// 创建一个UserRegistry对象,将其放到栈顶
			digester.push(new UserRegistry());
			// 当遇到<user>时创建一个User对象
			digester.addObjectCreate("users/user", User.class);
			// 根据<user>元素的属性,对刚创建的User对象的属性进行设置
			digester.addSetProperties("users/user");
			// 当遇到<user>的子元素<name>时将子元素值设置为User对象的name属性
			digester.addBeanPropertySetter("users/user/name");
			digester.addBeanPropertySetter("users/user/age");
			digester.addBeanPropertySetter("users/user/sex");
			// 当再次遇到<users>的子元素<user>时调用栈顶对象的register方法
			digester.addSetNext("users/user", "register");
			// 分析结束后,返回根元素
			regs = (UserRegistry) digester.parse(input);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		}
		return regs;
	}

	public static UserRegistry parseByRule() {
		UserRegistry regs = null;
		Digester digester = null;
		try {
			digester = DigesterLoader.createDigester(rule.toURL());
			regs = (UserRegistry) digester.parse(file);
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		}
		return regs;
	}
}

Rule规则
<?xml version='1.0'?>
<!DOCTYPE digester-rules 
  PUBLIC "-//Jakarta Apache //DTD digester-rules XML V1.0//EN" 
    "file:///../digester/dtds/digester-rules.dtd">

<digester-rules>
    <pattern value="users">  <!-- 遇上users节点时 -->
        <object-create-rule classname="UserRegistry" />  <!-- 创建对象 -->
        <set-properties-rule /> <!-- 设置属性 -->
        <pattern value="user"> <!-- 遇上user节点时 -->
            <object-create-rule classname="User" /> <!-- 创建对象 -->
            <set-next-rule methodname="register" paramtype="User"/> 
            <set-properties-rule /> <!-- 设置属性 -->
            <bean-property-setter-rule pattern="id" /> <!-- 调用对象的setter方法 -->
            <bean-property-setter-rule pattern="name" />
            <bean-property-setter-rule pattern="age" />
            <bean-property-setter-rule pattern="sex" />
        </pattern>
    </pattern>
</digester-rules>



分享到:
评论
1 楼 signs228 2008-12-16  
需要解析的XML文件没有贴出来啊!!!

相关推荐

    Java_XML解析之Digester的使用

    Java XML解析中的Digester是一个强大的工具,用于将XML文档转换为Java对象。它最初是为了处理Struts框架的配置文件而设计的,随着时间的发展,它成为一个轻量级且高效的框架,专注于单向转换,即从XML到Java对象。...

    利用commons-digester解析xml

    总的来说,Apache Commons Digester是一个强大的XML解析工具,对于需要频繁处理XML数据的Java开发者来说,它提供了便捷的API和灵活的规则机制,大大简化了数据绑定的过程。通过深入学习和使用,可以提升开发效率,并...

    xml解析commons-digester的demo

    本示例将详细介绍如何使用Apache Commons Digester进行XML解析。 Apache Commons Digester的核心概念是规则(Rule),这些规则定义了XML元素与Java对象之间的映射关系。通过一系列规则,Digester能够自动地读取XML...

    digester解析xml的问题.pdf

    Digester 是 Apache Commons 中的一个工具类库,它用于解析 XML 文档,并根据预先定义的规则自动创建和配置 Java 对象。在上述问题中,我们看到一个 XML 文档表示了一个考试,其中包含了多个题目,每个题目有其编号...

    XML的解析之——使用Digester

    本文将深入探讨如何使用Apache的 Digester 库来解析XML文档,这是一款强大的工具,能够将XML数据映射到Java对象,简化了处理XML的过程。 Digester 是Apache Commons项目的一部分,它提供了一种规则驱动的方法来处理...

    Digester java解析xml

    1. **初始化 Digester**: 在使用 Digester 之前,我们需要创建一个 Digester 实例,并设置一些基本配置,例如XML解析器的命名空间处理等。然后可以通过 `addRuleSet` 方法添加预定义的规则集,或者通过 `addRule` ...

    使用Apache的Digester来解析XML文档

    4. **配置Digester规则**:设置 Digester 规则以将XML解析为Java对象。这些规则通常在程序启动时初始化: ```java Digester digester = new Digester(); digester.setRulesValidation(true); // 启用规则验证 // ...

    Digester解析XML

    ### Digester解析XML知识点详解 #### 一、Digester简介 **Digester** 是Apache Commons项目中的一个子项目,主要用于简化XML文档的解析工作。它建立在SAX的基础之上,通过定义一系列的模式(Pattern)和规则(Rule...

    digester解析xml必备包.rar

    2. **设置解析器**:将XML解析器(如SAXParser)与Digester关联,以便在解析XML时触发已设定的规则。 3. **解析XML**:使用`parse`方法,传入XML文件的输入流,开始解析过程。 4. **处理结果**:解析完成后,根...

    使用Digester解析XML文档示例

    Digester是Apache Jakarta项目下的一个工具类库,它简化了基于SAX(Simple API for XML)的XML解析过程。Digester能够根据定义好的规则自动将XML文档转换成Java对象,非常适合用在配置文件读取、数据交换等场景。 #...

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

    - **XML解析**:Digester使用JAXP (Java API for XML Processing) 来解析XML文档,提取出元素和属性信息。 - **规则设定**:开发者可以通过`addRule`方法设置规则,例如当遇到特定的XML元素时,执行相应的Java方法...

    Digester解析XML的小例子(对象嵌套)

    Digester是一个规则驱动的XML解析器,它通过匹配XML元素路径来执行相应的Java方法,从而实现XML到Java对象的映射。这种映射过程通常称为“规则”。规则可以是创建新对象、设置属性值、调用方法等。 对于嵌套的对象...

    digester解析xml

    《digester解析XML详解》 ...总之,Digester为XML解析提供了便利,通过定义规则,可以将复杂的XML文档转换为易于操作的Java对象。熟练掌握这一工具,能够提高我们的开发效率,使XML处理更加得心应手。

    Digester解析XML文件

    本文将深入探讨如何使用Digester解析XML文件,以及在实际项目中如何应用。 首先,让我们了解什么是Apache Commons Digester。这是一个Java库,它的主要功能是读取XML文件,并基于一系列预先定义的规则(Rule),...

    使用digester配置rule.xml规则来解析自定义的xml文件-代码

    通过灵活地定义和组合规则,我们可以构建出强大的XML解析逻辑。 总结来说,Apache Digester结合`rule.xml`配置文件提供了一种强大而灵活的方式来解析自定义XML文件,将XML数据自动映射到Java对象。这种方式减少了...

    Digester解析XML问题.pdf

    通过 Digester,开发者可以轻松地处理XML数据,而无需手动编写大量的XML解析代码。这种面向对象的解析方式使得XML数据的处理更加直观和高效,尤其适合处理复杂的配置文件和数据结构。在实际项目中,可以结合Spring...

    使用digester解析XML

    不错的解析XML的类,主要利用org.apache.commons.digester.Digester;

    digester解析XML文件实例

    在Java开发中,XML文件常用于存储数据,配置信息等,因为其结构清晰、易于读写。Digester是Apache Commons项目中的一个...同时,理解Digester也能帮助你更好地理解其他类似的XML解析技术,如JAXB,DOM,SAX,和StAX等。

    Digester读取XML学习

    本篇文章将深入探讨如何使用Digester进行XML解析,并提供相关的学习资源。 【描述】:“Digester读取XML学习” Digester的使用基于一系列预定义或自定义的规则,这些规则决定了XML文档的元素与Java对象之间的映射...

Global site tag (gtag.js) - Google Analytics