`
lxgary
  • 浏览: 1553 次
  • 性别: Icon_minigender_1
  • 来自: 月亮
最近访客 更多访客>>
社区版块
存档分类
最新评论

Digester的一点点心得

阅读更多
以前也用过digester将xml对象转换成javabean,但当时的xml文件是比较标准的格式
类似于很多返回对象被封装到一个集合。
<result>
<resultInfoList>
<resultInfo>
<refNo>123</refNo>
<title>你我</title>
</resultInfo>
<resultInfo>
<refNo>1234</refNo>
<title>你</title>
</resultInfo>
</resultInfoList>
</result>


这样的结构非常好处理,甚至一眼就可以看见javabean该怎么定义

<?xml version="1.0" encoding="UTF-8"?>
<digester-rules>
	<object-create-rule pattern="result"
		classname="org.javaeye.digester.Result" />
	<!-- 对应在文件中的java bean实体类-->
	<pattern value="result/resultInfoList/resultInfo">
	<object-create-rule classname="org.javaeye.digester.ResultInfo " />
		<call-method-rule pattern="Refno" methodname="setRefNo"
			paramcount="0" />
		<call-method-rule pattern="Title" methodname="setTitle"
			paramcount="0" />
		<set-next-rule methodname="addResultInfo" />
	</pattern>
</digester-rules>


一些有层次感的结构也可以照葫芦画瓢
但,今天碰到了这种结构,根节点直接跟属性,还是纠结了一阵子
<result>
<code>1</code>
<message></message>
<resultList>
<resultInfo>
<title>你好</title>
…
</resultInfo>
</resultList>
<pagination>
<totlePage>20</totlePage>
</pagination>
<result>


我尝试用digister的映射xml来将这个结果集和javabean对应起来,尝试很多遍,都失败了,如果直接用一个Result对象来匹配,code放不进来,最后不得不在外面套了一层

其中:
public class ResultDO  implements Serializable{
	private static final long serialVersionUID = 855400932557733834L;
	private int code;
	private String message;
	private Pagination pagination;
	private List<ResultInfoDO> resultList = new ArrayList< ResultInfoDO >();
public void setPagination(Pagination pagination) {
		this.pagination = pagination;
	}
public void addResultInfo(ResultInfoDO resultInfoDO){
		resultList.add(resultInfoDO);
	}
public void setCode(int code) {
		this.code = code;
	}
public void setMessage(String message) {
		this.message = message;
	}
	...
}

然后把它封装到一个结果类中:
public class FinalResultDO implements Serializable{

	private static final long serialVersionUID = -2176535677372216856L;

	private ResultDO resultDO;
 public ResultDO getResultDO() {
		return resultDO;
	}

	public void setResultDO(ResultDO resultDO) {
		this.resultDO = resultDO;
	}
    ...
}


Digester digester =DigesterLoader.createDigester(rules);
		digester.push(finalResultDO );


对应的规则rule.xml:
<?xml version="1.0" encoding="GBK"?>
<digester-rules>
	<pattern value="result">
      <object-create-rule classname="org.javaeye.digester.ResultDO" />
       <set-next-rule methodname="setResultDO"/>
		<set-properties-rule />
		<bean-property-setter-rule pattern="code" />
		<bean-property-setter-rule pattern="message" />
	</pattern>
	<pattern value="result/resultList/resultInfo">
		<object-create-rule classname="org.javaeye.digester.resultInfoDO" />
		<set-next-rule methodname="addResultInfo"/>
		<set-properties-rule />
		<bean-property-setter-rule pattern="titile" />
		…
	</pattern>
	<pattern value="result/pagination">
      <object-create-rule classname="ogr.javaeye.digester.Pagination" />
      <set-next-rule methodname="setPagination"/>
      <set-properties-rule />
      <bean-property-setter-rule pattern="totalPage" />
   </pattern>
</digester-rules>


这种结构很清晰,解析的过程也一目了然,但美中不足就是针对根节点直接跟属性,外面多余了一层封装,相当于把根节点之内的内容当作一个javabean,放到了结果对象中。
我想把ResultDO直接放到Digester容器中进行匹配,但尝试了几种配置的写法,还是失败了,对digester的了解还是太浅了。


分享到:
评论

相关推荐

    Digester

    Digester是Apache软件基金会下的Jakarta项目中的一个Java库,主要用于简化XML到Java对象的映射过程。在处理XML文档时,它通过匹配XML元素结构到相应的Java对象的方法调用,实现了XML解析的自动化。这个工具对于那些...

    digester用法测试案例

    Digester是Apache软件基金会的Jakarta项目中的一个实用工具库,它主要用来解析XML文档,并根据预定义的规则自动创建和配置Java对象。这个工具在处理XML到Java对象映射时,极大地简化了代码,避免了手动解析XML的繁琐...

    Castor、digester实例

    Apache Commons Digester是一个解析XML文档并基于规则执行相应操作的工具。与Castor不同,Digester并不提供对象到XML的映射,而是依赖于“消化规则”(digest rules)来解析XML并调用Java对象的方法。这些规则可以...

    Digester java解析xml

    Java中的Digester库是Apache Commons项目的一部分,它提供了一种方便的方式来解析XML文档,并将解析结果映射到Java对象模型上。这个库特别适合于创建简单的XML到Java对象的映射,而不需要编写大量的手动解析代码。在...

    commons-digester.jar

    `commons-digester.jar`是Apache Commons项目中的一个组件,主要功能是解析XML文档并根据预定义的规则自动创建和填充Java对象。这个组件在Java应用程序中尤其有用,特别是那些需要从XML配置文件中构建复杂对象层次...

    digester使用

    Apache Commons Digester是Apache软件基金会提供的一个强大的工具,专门用于将XML文档解析为Java对象。它通过定义一系列规则,实现了从XML到Java对象的映射,大大简化了开发过程,提高了代码的可读性和可维护性。 *...

    commons-digester3-3.2-API文档-中文版.zip

    赠送jar包:commons-digester3-3.2.jar; 赠送原API文档:commons-digester3-3.2-javadoc.jar; 赠送源代码:commons-digester3-3.2-sources.jar; 赠送Maven依赖信息文件:commons-digester3-3.2.pom; 包含翻译后...

    commons-digester3-3.2-API文档-中英对照版.zip

    赠送jar包:commons-digester3-3.2.jar; 赠送原API文档:commons-digester3-3.2-javadoc.jar; 赠送源代码:commons-digester3-3.2-sources.jar; 赠送Maven依赖信息文件:commons-digester3-3.2.pom; 包含翻译后...

    利用commons-digester解析xml

    标题“利用commons-digester解析XML”涉及到的是Java开发中的一种处理XML文档的工具——Apache Commons Digester。这个库提供了一种方便的方式来映射XML文档结构到Java对象,从而简化了XML数据的处理过程。 Apache ...

    commons-digester-2.1.jar

    `commons-digester-2.1.jar` 是Apache Commons项目中的一个组件,主要负责XML文档的解析和对象的创建与绑定。Apache Commons Digester库提供了一种规则驱动的方法来解析XML文档,并根据预定义的规则将XML数据映射到...

    Digester读取xml教程.rar

    在Java开发中,处理XML文件是常见的任务,而Apache Commons Digester库提供了一种高效且便捷的方式来解析XML并将其映射到Java对象。本教程将深入探讨如何使用Digester来读取XML文件,帮助你更好地理解和应用这一强大...

    digester(浅谈第一次使用)

    标题中的“digester”指的是Apache Commons Digester,它是一个Java库,主要用于解析XML文档并根据预定义的规则创建和配置Java对象。这个工具在处理XML到Java对象映射时非常有用,尤其在需要大量重复性操作的情况下...

    Digester两种解析方式

    在Java开发中,Apache Commons Digester是一个非常有用的库,它允许开发者通过XML配置来实例化、配置和关联Java对象。 Digester提供了两种主要的解析方式,即规则硬编码和独立的规则文件,这两种方法各有其特点和...

    digester组件简化了xml文件处理操作

    为了更高效地管理XML数据,Apache Commons项目提供了一种名为**Digester**的组件,它能够简化XML文件的处理操作,并将XML文件映射为Java对象,极大地提高了开发效率。 #### 二、Digester组件概述 **Digester**是...

    XML的解析之——使用Digester

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

    digester3.2 源码

    Apache Digester是一个强大的Java库,用于在XML文档和Java对象之间建立映射关系,通过规则来自动解析XML并创建或更新对象结构。在digester3.2版本中,我们能够深入理解其内部工作机制,提升XML处理的效率和灵活性。 ...

    Digester 实例

    Digester 是一个非常实用且功能强大的 XML 解析工具,它属于 Jakarta 开源项目下的 Commons 子项目之一。通过 Digester,开发者能够轻松地解析复杂的 XML 文件,而无需深入理解 XML 的底层处理机制。这对于快速开发...

    Jakarta-Common-Digester使用笔记

    Digester不是一个XML Parser,它只是对SAX更高层次上的一个封装使用Digester,将XML映射成javaBean. 我们无须了解SAX和DOM的解析过程,只要给Digester添加一些解析规则,就能对一个xml文件进行解析。Digester使用...

    digester包

    在Java开发中,处理XML数据是一项常见的任务,而Apache Commons Digester库就是这样一个强大的工具,它提供了一种高效且方便的方式来解析XML文档,并将其映射到Java对象结构中。本文将深入探讨digester包的原理、...

    使用Apache_Commons_Digester

    1. **创建 Digester 实例**:首先创建一个 `org.apache.commons.digester.Digester` 实例,并为其配置实现 `DigesterRule` 接口的对象。 2. **初始化 Stack**:使用 `Digester.push()` 方法将一个初始对象放入 ...

Global site tag (gtag.js) - Google Analytics