通过这篇文章,把本人理解的关于XML解析器和Java下一些XML相关的概念介绍清楚。注意:这篇文章并没有具体的编程实现上的说明。
我很清楚,由于水平有限,这篇文章会有很多错误,欢迎大家批评指正,共同进步J
1、 什么是XML解析器?
XML解析器英文为XML Parser,它能够读入标准的XML文件或文件流,实现对文档正确性的验证、生成文档对象或文档流以便应用程序进一步处理等等操作。XML解析器的制作或开发一般遵循标准定义的API,现在被提及的概率最高的API标准定义是DOM和SAX。
根据下面的一些介绍,你还会发现,XML解析器定义了接口和实现,其中接口是符合下面介绍的标准的。
2、 我们有必要介绍一下DOM和SAX。
DOM英文为Document Object Model,W 3C 标准,与名字不同,它并不是定义文档结构的标准,而是定义了对XML、HTML等文档的操作的接口及其它标准。DOM远不只定义了操作XML文档的接口及标准,我们只关注DOM中定义的和XML相关的内容。
DOM定义了对于一个XML的解析器(解析一个XML文件),它应该具有哪些操作,这些操作的接口的定义是如何。
DOM标准本身是语言无关的,但XML解析器的实现必须依赖某个具体的语言,以Java为例,在JDK的org.w 3c .dom包中实现了DOM标准中对接口的描述,可以看到,这个包里面定义的全部是接口,并没有具体的实现。
SAX英文为Simple API for XML,它是由XML-DEV的一些人员开发的一套对XML进行操作的标准。
SAX定义的接口的标准的实现在JDK的org.xml.sax包中,但注意:org.xml.sax.helpers是解析器以来于定义的接口的具体类实现,应该不属于SAX的标准。
DOM VS SAX(并不是对比这两个标准)
有XML解析编程经验的人应该都知道使用DOM和SAX方式解析的区别。最大的区别:DOM方式的解析器将XML文档读入后在内存中生成一个文档树,来对文档进行操作;SAX方式的解析器类似解释型的语言,它以流的方式读入XML,并逐行解析。如此说来,对于大的文档,SAX应该是比较好的选择,但它并没有对增加XML节点有很好的支持。
通过上面的介绍,如果你能知道DOM和SAX是语言无关的,解析器一般是定义了DOM和SAX标准接口和实现的,那么,目的就达到了J下面,介绍一个XML的解析工具。
3、 Xerces
Xerces首先由Apache开发,被认为是最健壮的XML解析器,有多种语言的实现,其Java版本为Xerces-J,目前的最新版本为 1.4.4 ,它可以解析XML1.0标准的文件(XML只有1.0标准…),强大的XML解析功能包括支持DOM Level 2,SAX Version 2以及更低版本,另外它支持JAXP(稍后介绍)。
4、 JAXP
英文全名为Java API for XML Processing,最新版本是1.4。1.3版本已进入JSR-206,对于使用Java开发XML应用的人来说,了解它是必须的。
首先,特别需要注意的一点是JAXP不是一个XML解析器,它并没有XML解析的具体实现!!
严格来说,JAXP是一个API,但它和在Java中实现的DOM和SAX接口并不一样,它根本就没有那样的接口,而是在它们之上又进行了抽象。JDK中JAXP的源码在包javax.xml.parsers,我们发现这个包中,只有4个可见类,分别是DocumentBuilder,DocumentBuiderFactory,SAXParser,SAXParserFactory。
它的目的是将所有符合DOM和SAX标准的XML解析器的实现透明化,XML应用程序开发人员不用关心到底使用的哪个解析器,不仅如此,使用JAXP,还可以实现XML解析器的可插拔。
如果有必要,我们可以继续探讨它的编程实践。
5、 本来,我是想研究一下DOM4J和JAXP的关系,以及JDOM和DOM以及SAX的关系,但由于时间关系,只能暂时到此为止。
6、 参考资料:
A. IBM 141认证教材
B. 关于DOM的介绍:www.w 3c .org/dom
C. 关于Xerces-J的介绍:http://xerces.apache.org/xerces-j/
D. 关于JAXP的介绍:
a) www.ibm.com/developerworks/java/library/x-jaxp/
b) www.ibm.com/developerworks/java/library/x-jaxp2/
c) https://jaxp.dev.java.net/
E. 关于JSR的介绍:www.jcp.org
F. 关于DOM4J和JAXP的一点讨论:
http://blog.csdn.net/toafu/archive/ 2005/04/06 /338337.aspx
G. JDOM简介
JDOM是一个开源项目,它基于树型结构,利用纯Java的技术对XML文档实现解析、生成、序列化以及多种操作。JDOM 直接为Java编程服务。它利用强而有力的Java语言的诸多特性(方法重载、集合概念以及映射),把SAX和DOM的功能有效地结合起来。在使用设计上尽可能地隐藏原来使用XML过程中的复杂性。利用JDOM处理XML文档将是一件轻松、简单的事。
JDOM 在2000年的春天被Brett McLaughlin和Jason Hunter开发出来,以弥补DOM及SAX在实际应用中的不足。这些不足之处主要在于SAX没有文档修改、随机访问以及输出的功能,而对于DOM来说,Java程序员在使用时总觉得不太方便。
JDOM的最新版本为JDOM Beta 10。最近JDOM被收录到JSR-102内,这标志着JDOM成为了Java平台组成中的一部分。
JDOM类库
在使用JDOM时要下载JDOM类库,将其加载到JDK中。JDOM类库是由以下几个包组成:
包名 说明
org.jdom 包含了所有的xml文档要素的java类。
org.jdom.adapters 包含了与dom适配的java类。
org.jdom.filter 包含了xml文档的过滤器类。
org.jdom.input 包中提供的构造类从任何数据源中构造文档。
org.jdom.output 包含了读取xml文档的类。
org.jdom.transform 包含了将jdom xml文档接口转换为其他xml文档接口。
org.jdom.xpath 包含了对xml文档xpath操作的类。