`
bazhuang
  • 浏览: 149329 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

利用digester来将xml转换为bean

    博客分类:
  • java
阅读更多
org.apache.commons.digester这个包提供了一个工具,可以很迅速的将一个xml文件转换为一个bean。
下面的这个例子,包括有2个bean文件,一个xml文件,一个java主处理文件。
2个bean的代码如下:
package test.digester;
import java.util.ArrayList;
import java.util.List;

public class Foo {
	private List<Bar> bars;
	private String name;
	
	public void addBar(Bar bar){
		if (bars==null){
			bars = new ArrayList<Bar>();
		}
		bars.add(bar);
	}
	
	public List getBars() {
		return bars;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	public String toString(){
		String str = "";
		str = "name=" + getName() + ";";
		List list = getBars();
		if (list==null){
			return str;
		}
		int len = list.size();
		String bar = "";
		for(int i=0;i<len;i++){
			Bar b = (Bar)getBars().get(i);
			bar = bar + "{"+b.toString()+"},";
		}
		if (bar.length()>0){
			str = str + "["+bar.substring(0, bar.length() - 1)+"]";
		}
		return str;
	}
}

package test.digester;

public class Bar {
	private String id;

	private String title;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String toString(){
		String str = "";
		str = "id="+getId()+";title="+getTitle()+";";
		return str;
	}
}

这个2个bean中的toString方法,我是为了能够方便的看出转换后的内容是否正确而添加的。
还有一个xml文件也是放在包test.digester中,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<foo name="The Parent">
  <bar id="123" title="The First Child"/>
  <bar id="456" title="The Second Child"/>
  <bar id="789" title="测试"/>
</foo>

最后就是这个主处理文件:
代码如下:
package test.digester;

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Enumeration;

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

public class DigesterTest {
	private Digester digester;
	
	private static String filepath = "test/digester/test.xml";
	
	public DigesterTest(){
		this.init();
	}
	
	private void init(){
		digester = new Digester();
		ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
		URL url = classLoader.getResource(filepath);
		Foo foo = new Foo();
		digester.setValidating(false);
		digester.push(foo);
		digester.addSetProperties("foo");
		digester.addObjectCreate("foo/bar", "test.digester.Bar");
		digester.addSetProperties("foo/bar");
		digester.addSetNext("foo/bar", "addBar", "test.digester.Bar");
		try{
			digester.parse(url);
			System.out.println(foo);
		}
		catch(IOException e){
			System.out.println(e);
		}
		catch(SAXException e){
			System.out.println(e);
		}

	}
	
	public static void main(String[] args){
		DigesterTest test = new DigesterTest();
	}
}

这里的init方法也是可以写成:
		digester = new Digester();
		ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
		URL url = classLoader.getResource(filepath);
		digester.setValidating(false);
		digester.addObjectCreate("foo", "test.digester.Foo");
		digester.addSetProperties("foo");
		digester.addObjectCreate("foo/bar", "test.digester.Bar");
		digester.addSetProperties("foo/bar");
		digester.addSetNext("foo/bar", "addBar", "test.digester.Bar");
		try{
			Foo foo = (Foo)digester.parse(url);
			System.out.println(foo);
		}
		catch(IOException e){
			System.out.println(e);
		}
		catch(SAXException e){
			System.out.println(e);
		}

第一种是先new一个Foo,然后把这个Foo对象push到digester中去,最后在parse转换之后,直接处理这个Foo对象就可以了。
第二种方式是digester.addObjectCreate("foo", "test.digester.Foo");就是将Foo类的name传入,在parse中就会根据这个名字转换得到一个Foo对象,我们只要把返回结果转换为Foo就OK了。
在Struts1.3.9中作者是采用的push方法的,digester中还有其他的处理方法的,需要的时候可以自己找资料研究一下。
  • test.rar (1.9 KB)
  • 描述: 示例源代码下载
  • 下载次数: 83
分享到:
评论

相关推荐

    利用Digester把XML转换成为Java对象

    ### 使用Digester将XML转换为Java对象 #### 概述 在软件开发过程中,特别是对于较为复杂的系统,配置文件的管理变得尤为重要。传统的配置文件如`.properties`仅能处理简单的键值对设置,而对于复杂的对象配置,则...

    Apache xml转换java对象 Digester

    ### Apache XML转换Java对象——Digester #### 一、引言 在软件开发过程中,XML是一种常见的数据交换格式。为了方便地将XML数据转换为Java对象,Apache Commons库提供了一个强大的工具——`Digester`。本文将详细...

    digester 解析xml

    本篇文章将深入探讨如何使用Digester来解析XML,并通过XSD(XML Schema Definition)进行验证,最终将XML数据转换为Java Bean对象。 **什么是Apache Commons Digester?** Apache Commons Digester是一个Java库,它...

    digester包

    这使得开发人员能够将XML配置文件转换为相应的Java对象模型,极大地简化了处理XML的工作流程。 在标题中提到的"digester包",具体是指Apache Commons Digester 1.8版本。这个版本是digester的一个稳定版本,具有...

    xml与javabean的相互转换

    3. 第三方库:除了标准的Java库,还有许多第三方库如Apache's Digester、Castor和XStream等,它们提供了更简洁的API来简化XML与JavaBean之间的转换。 4. XMLBeans库:压缩包中的"xmlbean"可能指的是Apache的...

    digester jar包大全

    《digester jar包大全——...通过熟练掌握和运用Apache Digester,我们可以将XML文档转换为易于操作的Java对象,从而提升开发效率,减少出错概率。对于需要处理大量XML数据的项目, Digester无疑是一个值得信赖的盟友。

    commons-digester.jar下载

    这个库在处理XML配置文件时特别有用,因为它可以自动化将XML元素和属性转换为对象的属性和方法调用。在给定的标题"commons-digester.jar下载"和描述"commons-digester3-3.0.jar下载"中,我们关注的是Apache Commons ...

    digester 实例

    这个库常用于将XML配置文件转换为Java对象结构,减少了手动解析XML并构建对象的代码量。 描述中提到的博客链接指向了Tristan-s在iteye上的一个博客文章,可能详细解释了一个或多个digester的使用案例。由于没有具体...

    java xml realworld problem

    - JAXB(Java Architecture for XML Binding):自动将Java对象转换为XML文档,反之亦然。通过注解或XML Schema定义对象结构。 - JDOM:Java特定的DOM实现,提供了更友好的API。 - DOM4J:提供了比JDOM更丰富的...

    xml解析在java中的应用小程序

    JAXB提供了一种将Java对象转换为XML,反之亦然的机制。通过`javax.xml.bind.JAXBContext`和`Unmarshaller`、`Marshaller`接口,可以轻松地实现对象与XML的互换。这对于数据交换和序列化非常有用。 6. XML配置文件的...

    xbean,xmlpublic,xml-apis等jar

    XBean通过Apache Commons Digester和Xerces来解析XML配置文件,并将其转换为Java对象。这个框架主要用于简化复杂配置文件的处理,尤其是在Spring框架中,XBean可以作为一个扩展,帮助处理XML配置文件。它支持动态...

    betwixt详细使用说明

    此外,如果你需要将 XML 转换为 Java 对象,还需要引入 `commons-digester-1.8.jar`,因为 Betwixt 在进行反向转换时依赖于 Commons Digester。 接下来,我们来看一个简单的示例(example1),演示如何将一个 Java ...

    java对dom的三种操作方式

    ### Java对DOM的三种操作方式 在Java编程领域中,处理XML文档是一项常见的任务。...而Digester适用于将简单的XML文档快速转换为Java Bean对象的场景。选择哪种技术取决于具体的应用需求和文档大小等因素。

    Websiteconfig

    例如,使用Digester可以创建匹配XML结构的对象模型,而Betwixt或xmltobean.jar则可以将整个XML文档映射为Java对象。 5. **配置管理最佳实践**:良好的配置管理包括保持配置文件与源代码分离,确保安全性(防止未...

    commons jar包

    Digester通过定义规则集(RuleSet),可以自动将XML文档的元素映射到Java对象的创建和方法调用上。这在处理XML配置文件时特别有用,可以避免手动解析XML并构建相应的Java对象。开发者可以定义一系列匹配模式,当解析...

    apache commons 文档

    Digester是用于XML文件解析和转化为Java对象的工具库,它允许用户定义一组规则,通过这些规则将XML文件映射到Java对象图中。 - **Digester**:基于一系列规则,Digester解析XML文档,创建对象和调用方法。 ### ...

Global site tag (gtag.js) - Google Analytics