以前也用过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是Apache软件基金会下的Jakarta项目中的一个Java库,主要用于简化XML到Java对象的映射过程。在处理XML文档时,它通过匹配XML元素结构到相应的Java对象的方法调用,实现了XML解析的自动化。这个工具对于那些...
Digester是Apache软件基金会的Jakarta项目中的一个实用工具库,它主要用来解析XML文档,并根据预定义的规则自动创建和配置Java对象。这个工具在处理XML到Java对象映射时,极大地简化了代码,避免了手动解析XML的繁琐...
Apache Commons Digester是一个解析XML文档并基于规则执行相应操作的工具。与Castor不同,Digester并不提供对象到XML的映射,而是依赖于“消化规则”(digest rules)来解析XML并调用Java对象的方法。这些规则可以...
Java中的Digester库是Apache Commons项目的一部分,它提供了一种方便的方式来解析XML文档,并将解析结果映射到Java对象模型上。这个库特别适合于创建简单的XML到Java对象的映射,而不需要编写大量的手动解析代码。在...
`commons-digester.jar`是Apache Commons项目中的一个组件,主要功能是解析XML文档并根据预定义的规则自动创建和填充Java对象。这个组件在Java应用程序中尤其有用,特别是那些需要从XML配置文件中构建复杂对象层次...
Apache Commons Digester是Apache软件基金会提供的一个强大的工具,专门用于将XML文档解析为Java对象。它通过定义一系列规则,实现了从XML到Java对象的映射,大大简化了开发过程,提高了代码的可读性和可维护性。 *...
赠送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; 包含翻译后...
赠送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”涉及到的是Java开发中的一种处理XML文档的工具——Apache Commons Digester。这个库提供了一种方便的方式来映射XML文档结构到Java对象,从而简化了XML数据的处理过程。 Apache ...
`commons-digester-2.1.jar` 是Apache Commons项目中的一个组件,主要负责XML文档的解析和对象的创建与绑定。Apache Commons Digester库提供了一种规则驱动的方法来解析XML文档,并根据预定义的规则将XML数据映射到...
在Java开发中,处理XML文件是常见的任务,而Apache Commons Digester库提供了一种高效且便捷的方式来解析XML并将其映射到Java对象。本教程将深入探讨如何使用Digester来读取XML文件,帮助你更好地理解和应用这一强大...
标题中的“digester”指的是Apache Commons Digester,它是一个Java库,主要用于解析XML文档并根据预定义的规则创建和配置Java对象。这个工具在处理XML到Java对象映射时非常有用,尤其在需要大量重复性操作的情况下...
在Java开发中,Apache Commons Digester是一个非常有用的库,它允许开发者通过XML配置来实例化、配置和关联Java对象。 Digester提供了两种主要的解析方式,即规则硬编码和独立的规则文件,这两种方法各有其特点和...
为了更高效地管理XML数据,Apache Commons项目提供了一种名为**Digester**的组件,它能够简化XML文件的处理操作,并将XML文件映射为Java对象,极大地提高了开发效率。 #### 二、Digester组件概述 **Digester**是...
本文将深入探讨如何使用Apache的 Digester 库来解析XML文档,这是一款强大的工具,能够将XML数据映射到Java对象,简化了处理XML的过程。 Digester 是Apache Commons项目的一部分,它提供了一种规则驱动的方法来处理...
Apache Digester是一个强大的Java库,用于在XML文档和Java对象之间建立映射关系,通过规则来自动解析XML并创建或更新对象结构。在digester3.2版本中,我们能够深入理解其内部工作机制,提升XML处理的效率和灵活性。 ...
Digester 是一个非常实用且功能强大的 XML 解析工具,它属于 Jakarta 开源项目下的 Commons 子项目之一。通过 Digester,开发者能够轻松地解析复杂的 XML 文件,而无需深入理解 XML 的底层处理机制。这对于快速开发...
Digester不是一个XML Parser,它只是对SAX更高层次上的一个封装使用Digester,将XML映射成javaBean. 我们无须了解SAX和DOM的解析过程,只要给Digester添加一些解析规则,就能对一个xml文件进行解析。Digester使用...
在Java开发中,处理XML数据是一项常见的任务,而Apache Commons Digester库就是这样一个强大的工具,它提供了一种高效且方便的方式来解析XML文档,并将其映射到Java对象结构中。本文将深入探讨digester包的原理、...
1. **创建 Digester 实例**:首先创建一个 `org.apache.commons.digester.Digester` 实例,并为其配置实现 `DigesterRule` 接口的对象。 2. **初始化 Stack**:使用 `Digester.push()` 方法将一个初始对象放入 ...