(作者:陈广佳)
本文并不意图对jdom这种用于快速开发xml的第三方工具包进行详尽的介绍或要涵盖jdom对xml的所有处理方法,因为这方面的文章及资料已经很丰富,仅希望能通过本人使用jdom进行具体开发的事例给没有用过或刚开始使用jdom的朋友们一个对该api较具形态的一点认知。
项目概述以及xml api的选择–jdom api
本人所在的出版社近期将中日韩文工具书转成了电子资料,在开发教学多媒体的同时希望能够开发基于网络的电子辞典(先进行日文外来语词典的开发),后一项目由本人负责。由于项目将以japplet作为客户端的选择,而词库资料以xml文档形式提供,因此我开始收集java对xml处理的相关资料。我最先是在java.sun.com上看到jdom的有关介绍,在访问了jdom org的网站以及看了几篇对jdom叙述得很好的文章后,我决定使用jdom来完成该项目中对xml的处理。
jdom api版本是在jdom org上下载的jdom beta6,现在最新的版本是jdom beta7,相对于beta6,beta7进行了极大的改进。(下载jdom的最新版本)
我使用jbuilder3进行开发,jdom需要做为一个增加的类库加进其java libraries里。我的jdom是装在e盘的根目录下,配置如下:
| name:jdom class path:e:\jdom6bt\jdom-b6\build\jdom.jar source path:e:\jdom6bt\jdom-b6\src\java.zip doc path:e:\jdom6bt\jdom-b6\build\jdom.jar |
但jbuilder5已经对jdom有直接的支持,jdom api已经内嵌在其java libraries里,这样我们使用jdom就更方便。
词库数据资料xml文档结构
在该项目中xml的文档结构比较简单,以<dict>为根,主体以日文片假名词条为单元(<word>),下面分别以<spell><prop><mean>各子元素对应片假名拼写、外来语拼写、中文解释各项内容:

该项目中,所使用的xml并不是使用jdom生成,但要使用jdom生成同样的xml结构也是很简单的,以下是简单实现代码片段:

由于要支持多国语,所以xml以utf-8编码,这里需要说明的是,jdom的xmloutputer默认输出字符编码为utf-8,如果要输出别种编码,可使用outputter.setencoding()进行设定(请参考http://www.jdom.org/docs/faq.html)。在该faq里只说明了output的编码情况,但是并没有说明jdom在输入处理xml时对编码的要求,我开始使用时xml文档是以ucs-2编码的,但jdom并不能正常处理,出现的错误:
| org.jdom.jdomexception:error in building:the name""is not legal for jdom/xml elements:xml names cannot be null or empty |
在改用了utf-8编码后,jdom对xml的处理就能正常进行,不知是否与java内部的unicode编码于外来文件的unicode编码高低字节有关(对于处理一般的unicode文件,在输入时,需要把文件的高低字节互换才能使java对其进行无误的处理),我暂时还没找到有关的资料。
使用jdom实现电子辞典的词条查询功能
要实现的查询功能主要有两个,①按日文片假名模糊查询、②按外来语模糊查询:
(这里的模糊查询只展示简单的首字符相同&字符数相同的查找法则)这里仅挑取与jdom有关的语句展示:

使用jdom为xml文档增加子元素
为了要往xml资料文档里增加韩国方面将完成的韩文翻译存放空间,需要往xml文档里增加子元素-koreamean,增加子元素的实现与上面所介绍的生成xml文档差不多,仅借此简单举一个jdom文档输出的例子,以及提一下本人在处理时所遇到的一些问题。
程序片段:

结果:
我首先使用的是用filewrieter类输出,输出的效果是可以输出xml档,却出现不能把所有内容全部输出的情况,最后一部分的词条被遗漏,怀疑是使用filewriter类输出文件长度受限制的原因。
于是使用fileoutputstream类进行重新输出,输出结果就完全正确了。
小结
jdom具有丰富、强大的xml处理能力,本文仅用实例有限的展示了其中几项常用的功能,相信随着jdom正式被接受成为java规范要求,它的应用越来越广范,读者们会看到更多更系统的对jdom的应用例示。
参考资料
jdom org网站
jsrs:java specification requests detail– jsr 102 jdom 1.0
easy java/xml integration with jdom–by jason hunter and brett mclaughlin http://www.javaworld.com/javaworld/jw-05-2000/jw-0518-jdom.html
http://www.ibiblio.org/xml/slides/nypc/jdom/
