摘 要:jdom是xml文件的一种java表示,它提供了一种表示文件的方法,可以方便有效地阅读、操作和书写文件,并致力于用 20%的精力来解决80%的问题。jdom有一个简单明了的api,既轻量又快速,它集成了dom和sax的优点,将两种技术整合到一起,使两者的配合更加自然和协调。本文着重论述jdom的技术内涵、解析原理,给出了jdom解析xml文件的关键代码,为xml的相关开发设计人员提供了一种更好的参考依据。关键词:jdom; dom; sax; xml; java
中图分类号:tn011-34; tp312 文献标识码:a
文章编号:1004-373x(2010)22-0040-02
xml data analysis technique based on jdom
liu yu-xiao1, yang ya-juan2
(1. xiangfan university, xiangfan 441001, china; 2. northwest civil aviation air traffic management bureau, xi’an 710082, china)
abstract: jdom is a kind of java in xml document, which provided a way to express document in order to read,operate and write conveniently. jdom has a simple api, which is slight and fast. api collected the merits of dom and sax so that both can work in a coordinate and natural way. the technical and the analysis principle of jdom, and the key code about xml document are analyzed. a better reference is provided for the xml related development designers.keywords:jdom; dom; sax; xml; java
0 引 言
jdom是一个开源项目,它基于树型结构,利用纯java技术对xml文档实现解析、生成、序列化以及多种操作。WWw.133229.coMjdom 直接为java编程服务,它利用更为强有力的java语言的诸多特性(方法重载、集合概念以及映射),把sax和dom的功能有效地结合起来[1],在使用设计上尽可能地隐藏原来使用xml过程中的复杂性。利用jdom处理xml文档将是一件轻松、简单的事。
1 jdom的解析原理
jdom自身并没有xml解析器,其解析xml文件时,通过sax解析器读取事件流,根据这些事件来建立jdom树[2]。同时,可以对解析器设置各种属性,包括errorhandler,dtdhandler,entityresolver和基础sax xmlreader支持的任何自定义特性和属性。与dom不同的是,树中所有不同类型的节点都表示为具体类,而不表示为接口[3]。
jdom没有专门导航xml树型结构的方法,其导航树型结构通过element类的getchildren()方法[4]。这种方法返回一个元素列表,包括一个元素的所有内容(说明、处理指令、文本接点和元素内容)[5]。要进行深度搜索,就要对当前元素的子元素应用getchildren()方法。
jdom把不同的节点类型表示为10个具体类[6]。使用jdom可以很方便地生成一个xml文件,相比dom来说,其代码可以得到很大的简化[7]。但是,在导航xml树型结构时,又比dom复杂得多[8]。jdom处理xml文件的流程见图1。
图1 jdom处理xml流程
jdom解析xml文件的时序图见图2。
图2 jdom解析xml文件时序图
2 jdom解析xml文件的关键代码
jdom解析xml文件的关键代码如下:
import java.io.*;
import java.util.*;
import org.jdom.*;
import org.jdom.input.*;
public class jdomreader {
public static void main(string args[ ]) {
try {
saxbuilder builder = new saxbuilder();
document doc = builder.build(new file("xxx.xml"));
element foo = doc.getrootelement();
list allchildren = foo.getchildren();
for(int i=0;i sytem.out.println(((element)allchildren.get(i)).
getchild().getattribute());
sytem.out.println(((element)allchildren.get(i)).
getchild().gettext());
}
}
catch (exception e) {
e.printstacktrace();
}
}
}
3 结 语
jdom与dom主要有两方面不同。首先,jdom仅使用具体类而不使用接口,这在某些方面简化了api,但是也限制了灵活性;其次,api大量使用了collections类,简化了那些已经熟悉这些类的java开发者的使用[9]。
编辑整理
参考文献
[1]哈罗德.java 语言与xml处理教程:sax,dom,jdom,jaxp与trax指南[m].北京:电子工业出版社,2003.
[2]w3c. w3c document object model (dom)[r/ol].[2005-11-07].http://xml.coverpages.org/dom.html.
[3]jdom. jdom v1.0 api specification[r/ol].[2005-06-17]./docs/apidocs/.
[4]saxproject. sax 2.0 extensions[r/ol].[2005-06-07]./about.html.
[5]biggs wes, evans harry. simplify xml programming with jdom[j/ol].[2005-06-18]./ developerworks/library/j-jdom/index.htm.
[6]hunter jason. jdom and xml parsing[j/ol]. part 1.[2005-06-23]./technology/oramag/oracle/ 02-sep/o52jdom.html.
[7]mertz david. xml matters: the xom java xml api[j/ol].[2005-07-01]./developerworks/ library/ x-matters32.html.
[8]dom4j. xml api for java comparison[eb/ol].[2005-07-07]./compare.html.
[9]sosnoski dennis m. java中的xml: 文档模型,第一部分:性能[j/ol]. [2005-07-09]./ developerworks/cn/xml/x-injava.