使用AELFRED进行XML程序设计

--简介


  1. 简介
  2. 基本原理
  3. 如何使用
  4. 汉化
  5. Applet
  6. 杂项

aelfred是Microstar Software Ltd. 提供的一个开放源代码的基于Java语言的xml解析器,该公司是一个专门提供XML和SGML的解决方案的专业公司,在SGML和XML方面有丰富的经验。Aelfred最早是由David Megginson开发的,除了Aelfred之外,David Megginson还开发了现在已经成为了XML解析标准的SAX(Simple API for XML)接口,目前David Megginson成立了自己的咨询公司,专门做XML应用的咨询与解决方案业务并同笔者有email往来。该产品可以用于任何商业或者非商业用途,可以任意修改,发布,但是要保留最初的版权声明并作适当的修改记录。同其他商业或者非商业XML解析器相比,这个解析器最大的特点就是体积小,仅有二三十K,非常适于在Java Applet里面使用。其次,AELFRED还有速度快,占内存小和兼容性好等优点。根据开发人员进行的测试,这个解析器已经在以下平台通过了测试:JDK1.1.1(Linux),Jview(WindowsNT), Netscape 4(Linux 和 Windows NT), IE3/IE4(WindowsNT)。笔者在IE5.5和Mozilla0.8(Windows98)的环境下也测试通过。在一台P75的Linux系统上,在JDK1.1.1,不使用JIT的情况下解析速度可以达到每秒钟70K的XML文件,在P166的windowsNT的系统上使用JView可以达到每秒钟1M的文件内容。根据笔者自己进行的测试,在pwindow98, mobile PIII 650,128M内存的情况下解析10k的xml文件使用sun的java.exe需时大约160至220毫秒,平均约170毫秒,但是关闭JIT后须时110ms至170ms;使用jview.exe平均须时110ms。由于笔者使用的笔记本计算机的cache很小,因此应能受到影响,在台式机上测试的数字应该比这个还好一些。另外aelfred不在内存中保存文件内容的解析树,因此在解析XML文件时要比保存文件内容的dom方式消耗内存少。

但是这个解析器的缺点是仅能解析XML文档,不能动态生成XML文档,换句话说就是仅仅能够读,不能够写。但是不同的场合需要不同的工具,对于在Internet上使用的Applet,或者仅仅需要读取xml文件作为配置文件等仅仅需要轻量级解析器的场合,AELFRED体积小分量轻的优势远远超出了其缺点。而对于其他场合,例如应用程序,Intranet Applet等场和,选择apache/IBM提供的xerces等重量级的解析器将可以获得更大的自由度。同时,Aelfred尽管相应dtd,但是并不进行严格的xml语法检查,可能无法识别一些不正确的xml文件中的错误,因此aelfred不应该用来当作有XML严格语法要求的程序的解析器。Aelfred还有一个缺点就是不支持中文,不过由于提供了源代码,我们可以根据自己的需要进行修改。

AELFRED可以在http://www.mircostar.com下载带源代码的开发版和仅仅有jar文件的发行版。AELFRED的解析器部分的源文件文件总共有5个,声明了一个Interface:XmlHandler.java,三个classs:HandlerBase.java,SAXDriver.java,XmlParser.java,以及一个Exception,XmlException.java。其中XmlHandler和XmlParser是必须的,其他三个文件为可选的,必须得两个文件没有使用可选文件中定义的内容,因此可以不必安装。XmlHandler定义了基本的处理框架,我们使用Aefred处理XML文档时实际都要实现这个界面。HandlerBase是XmlHandler的一个简单实现,这个类提供了我们一个用来继承的基本类。SAXDriver在AELFRED的基础上实现SAX(Simple API for XML)。XmlParser.java是五个文件中最大的一个,提供了面对一般XML文档的解析方案,实际的解析工作都是在这个文件中完成的,修改AELFRED的工作也主要在这个文件里进行。XmlException仅仅简单继承了Exception,产生了一种特殊的Exception,因此本文不准备进行介绍。另外在aelfred中还提供了几个用来测试的文件。通过这几个测试文件我们可以了解aelfred在自己计算机上的运行情况和开发方法。