技术开发 频道

使用Apache宝石Digester改善XML处理



【IT168 专稿】

    在我们的程序中,经常会使用XML来进数据交换、保存和获取配置信息等工作。尤其是最近几年,XML的使用已经到了高峰,几乎所有的软件系统都将配置文件改成了XML格式,以适应通用的需求。

    为了满足使用XML的需要,大多数程序设计语言都提供了基于DOM和SAX的两种访问XML的方式。Java作为现在最流行的程序设计语言之一当然也不例外。在Java中可以很方便地通过DOM和SAX包中的类来处理XML。但问题随之而来。由于这些API来底层。XML对于它们来说就是简单的字符串。而开发人员必须使用各种方法(如使用循环来查找某一个结点)来对付这些字符串。这就象直接调用Windows API来写程序,虽然几乎拥有无限的灵活性,但也会给开发人员的工作量带来指数级的增长。

    问量产生了,当然会有解决它的方法。apache组织就为我们提供了一个更完美的解决方案。它就是Digester。

一、什么是Digester
    对于Apache的工程,也许每个使用Java语言的开发人员都会说出几样,如地球人都知道的Tomcat、当然还有最近火的不能再火的MVC框架Struts。哈哈,对,有人也许会抢着说,还有大名鼎鼎的Apache HTTP Server。这些都是Apache系列软件中的耀眼明星。但我们却忽略了Apache中一个很少有人问津的角落。这就是commons库。我们可以通过http://commons.apache.org来访问它。commons库有几十个子库组成。也许有人会说,这些库只是一些单一功能的jar包,没什么了不起的。但当我们看一下Apache的这些著名工程后,就会改变这种看法了。

    如在Tomcat中的lib目录就有很多commons库的jar包,如digester等。我们看看其他的工程,如Struts也是如此。因此,我们可以得出一个结论。commons库就是组成apache工程的基石,也可以将其称为是镶嵌在Apache王冠上的宝石。

    由于本文的内容和XML有关,因此,本文将主要介绍commons库中和XML有关的digester包,如果读者对其他的commons包感兴趣,可以查看相关文档,如http://commons.apache.org。

    Digester包最初是和Struts一起发布的。并随着Struts一起成长。这个包最初是为了处理struts-config.xml配置文件而设计的。但在不久就被很多人意识到这个包非常有用,于是就将其从Struts中分离出来,放到了commons库中。这个包的目标就是用最快速的方法将XML映射成Java类,并且拥有更大的灵活生。现在最新的Digester版本是1.8。本文将采用这个版本来编写程序。

    Digester类可以使开发人员指定一系列的动作(如为每个XML结点建立一个对象实例等),在任何时候来分析XML时都可以执行这些动作。Digester框架由10的“规则”组成。这些规则可以满足大多数的处理XML的需求(如建立一个bean或设置bean的属性),但用户可以任意定义自己的规则来满足自己特殊的需求。
0
相关文章