今天在用digester解析xml的时候,碰到一个问题,一段很简单的xml文档,需要通过digester包装成一个javabean
<?xml version="1.0" encoding="utf-8" ?>
<StockInfo>
<StockCode>00001</StockCode>
<StockName>长江实业</StockName>
<CurPrice>72.800</CurPrice>
....
</StockInfo>
项目中已经有digester的解析的抽象类,只需要重写一个规则的方法,传入需要返回的javaBean的类
AnalyseXml<HKStock> xml=new AnalyseXml<HKStock>(con.getInputStream()){
public void rule(Digester dig){
dig.addObjectCreate("StockInfo",HKStock.class);
dig.addCallMethod("StockInfo/StockCode","setStockCode",0);
dig.addCallMethod("StockInfo/StockName","setStockName",0);
dig.addCallMethod("StockInfo/CurPrice","setCurPrice",0);
.........
}
};
运行之后,返回的javaBean类中的属性没有值。而后进入AnalyseXml类中解析xml的那段代码中查看,发现有这样一行dig.push(ct)
T ct;
ct = (T)getDomainClass().newInstance();
dig.push(ct);
rule(dig);
dig.parse(this.input);
return ct;
这里想到了,当需要把xml文档解析成一个树形对象结构时侯,digester提供有clear(),
peek(),pop(),push()这些方法,而digester的push方法将一个新的对象压入栈顶,将栈顶的对象做为一个参数,传递给第二栈顶的一个方法,就可以简单地建立 起一种“父子关系”。而我需要的只是简单的javaBean,分析的是digester在解析xml时,首先把第一个HKStock对象通过push方法压入栈顶,这个对象注意是没有set任何值进去,在进行自定义的规则解析,碰到<StockInfo>开始标签,创建一个HKStock对象,接着把<StockInfo>下的子节点对应到HKStock的属性,一直到</StockInfo>结束。这个解析过程创建了一个有值的HKStock对象,并把它压入栈中,但它并没有和栈顶的对象建立起父子关系,当最后parse()方法时,digester返回的是栈底对象,也就是那个没有set任何值的对象,原因就出在这里。
然后着手准备修改
AnalyseXml<ArrayList> xml=new AnalyseXml<ArrayList>(con.getInputStream()){
public void rule(Digester dig){
dig.addObjectCreate("StockInfo",HKStock.class);
//和ArrayList建立父子关系
dig.addSetNext("StockInfo","add");
dig.addCallMethod("StockInfo/StockCode","setStockCode",0);
dig.addCallMethod("StockInfo/StockName","setStockName",0);
dig.addCallMethod("StockInfo/CurPrice","setCurPrice",0);
.........
}
};
运行之后返回的是有值的javaBean.还有种方法是把push给干掉,这样可以直接得到,但是需要形成复杂的对象树形结构时,还是需要把push加上,当然digester构建对象树形结构也不只这一种方法。
分享到:
相关推荐
2. **配置 Digester 规则**:接下来,我们需要定义 Digester 规则,告诉 Digester 当遇到特定的 XML 标签时如何创建和设置 Java 对象的属性。这通常通过调用 Digester 的 `addRule` 方法来完成。例如,对于 `<test>`...
5. **事件驱动编程**:Digester的工作方式类似于事件驱动,当XML解析过程中遇到匹配的规则时,就会触发相应的事件(即调用预先定义好的方法)。 6. **使用场景**:Digester常用于构建框架和库,其中XML配置文件需要...
Digester是Apache软件基金会的Jakarta项目中的一个实用工具库,它主要用来解析XML文档,并根据预定义的规则自动创建和配置Java对象。这个工具在处理XML到Java对象映射时,极大地简化了代码,避免了手动解析XML的繁琐...
标题中的“用到digester项目,直接解析存入数据库”指的是使用Apache Digester库来解析XML文件,并将解析后的数据直接存储到数据库中。Apache Digester是一个Java库,它允许开发者通过规则配置来关联XML文档的元素与...
Java中的Digester库是Apache Commons项目的一部分,它提供了一种方便的方式来解析XML文档,并将解析结果映射到Java对象模型上。这个库特别适合于创建简单的XML到Java对象的映射,而不需要编写大量的手动解析代码。在...
当你遇到`java.lang.NoClassDefFoundError: org/apache/commons/digester/RuleSet`这样的错误时,这意味着你的应用程序运行环境中缺少了Apache Commons Digester库,需要引入`commons-digester.jar`来解决这个问题。...
`commons-digester-2.1.jar` 是Apache Commons项目中的一个组件...遇到问题时,通常需要检查依赖配置、版本兼容性以及XML结构是否符合规则设定。正确使用这个库可以极大地提高开发效率,降低XML配置文件处理的复杂性。
Digester提供了错误处理机制,当解析过程中遇到问题时会抛出异常。同时,通过配置日志系统,如Log4j,可以获取详细的解析过程信息。 8. **实际示例** 以一个简单的用户信息XML为例,我们可以定义如下规则: - 当...
为了解决硬编码规则的可读性和可维护性问题,Digester还支持从外部XML文件加载规则。这种方式将解析逻辑与业务逻辑分离,使得代码更清晰,易于维护。规则文件通常采用DOSCH(Digester Object Creation and Setup How...
本文将深入探讨Digester的功能、工作原理以及如何在实际项目中应用。 **一、什么是Digester** Apache Commons Digester是一个用于读取XML文档并根据预定义规则自动创建和填充Java对象的工具。它通过使用匹配模式来...
`digester`是Apache Commons项目中的一个库,专门设计来帮助开发者方便地将XML文档解析成Java对象。在本文中,我们将深入探讨Java解析XML文件,特别是使用Digester库的过程。 1. **Java解析XML的基本概念** 在Java...
在“浅谈第一次使用”的描述中,可能涵盖了博主初次尝试使用Digester时的经验和遇到的问题,以及逐步理解和掌握该工具的过程。由于描述信息为空,我们无法获取具体的细节,但可以假设内容可能包括了基本概念介绍、...
**Digester** 是Apache Commons项目中的一个子项目,主要用于简化XML文档的解析工作。它建立在SAX的基础之上,通过定义一系列的模式(Pattern)和规则(Rule),能够有效地处理复杂的XML结构,从而简化开发者的编程...
1. **JAR文件**:包含所有编译好的类和库,这是实际使用的部分,开发者会将它添加到项目类路径中,以便在代码中引用和使用Commons Digester的功能。 2. **源代码**(如果包含):可能包括Java源文件,允许开发者...
9. **错误处理与调试**: 当 Digester 遇到解析问题时,它会抛出异常,理解这些异常信息对于调试至关重要。 10. **性能考虑**: 虽然 Digester 提供了便利,但XML解析可能对性能有影响,特别是在大型XML文件的情况下...
比如,当遇到特定的XML节点时,会创建一个新的Java对象,或者设置对象的属性。 2. 链接器(Linkers):链接器是一种特殊的规则,可以用来建立对象间的关联关系,比如父对象与子对象的关系。 3. 转换器(Converters)...
Apache Commons项目中的Digester库提供了一种方便的方式来解析XML文件,将其转换为Java对象,这对于处理配置文件或者构建对象关系映射非常有用。本篇文章将深入探讨如何利用Apache Commons Digester库解析XML。 ...
标题中的"commons-digester"是指Apache Commons项目中的一个模块,专门用于XML解析和对象绑定。这个库提供了方便的方法来将XML文档解析成Java对象,它通过定义一系列规则(Rules)来实现XML到对象的映射,使得处理...
Apache Commons Digester是Apache软件基金会的一个开源项目,它提供了一种方式来将XML文档的元素与Java对象的方法调用进行绑定,这样在解析XML时可以自动创建和填充Java对象。这种映射规则是通过一系列的“规则”...
`Digester`是Apache Commons项目的一个组件,它的主要功能是解析XML文档,并根据预定义的规则创建和配置Java对象。在Tomcat的上下文中,这些规则通常定义在`context.xml`、`server.xml`等配置文件中,它们描述了如何...