JSP XML文档解析
在应用程序中,经常需要对XML文档进行分析,以检索、修改、删除或重新组织其中的内容。例如,将应用程序运行所需的一些配置信息,以XML的格式保存在文件中,在程序启动时,读取XML文件,从中取出有用的信息,这就需要对XML文档解析。
XML处理都从解析开始。无论使用高层编程语言(如XSLT)还是低层Java 编程,第一步都是要读入XML文件,解码结构和检索信息等等,这就是解析。解析可能是开发人员能够使用的最基本的服务。解析文档时面临的第一个选择是采用现成的解析库(基本上每种编程语言都有,包括COBOL[Common Business Orient ed Language])还是自己创建一个。答案非常简单:选择现成的库。
在解析XML文档时,通常是利用现有的XML解析器软件对XML文档进行分析(除非本身开发的就是XML解析器),而编写的应用程序则通过解析器提供的AP I接口得到XML数据。其实现过程如图7-8所示:
jsp帮助文档图7-8 解析XML文档
如果不同的厂商开发的XML解析器提供的API都依赖于自身的产品,那么应用程序要使用解析器,就只能使用特定厂商的API。假如以后应用程序需要更换解析器,那么只能重写编写代码。庆幸的是,多数解析器提供了至少两种API,通常是一个对象模型API和一个事件API(也称为流API)。比如,Java平台同时提供了DOM(文档对象模型)和SAX(Simple API for XML)。这两套API提供了相同的服务:文档解码、可选的验证、名称空间解析等等。差别不在于服务而在于API 使用的数据模型。
现在普遍使用的解析器都是用Java编写的。常见的解析器有下面几种:IBM XML4J、Apache Xerces、Sun Project X、Microsoft MSXML、Oracle XML Parser for Java和James Clark XP。若读者喜欢,可以直接从网上下载。
一个XML Parser(解析器)是一段可以读入一个文档并分析其结构的代码。XML 解析器是XML和应用程序之间存在的一个软件组织,主要起一个桥梁的作用,为应用程序从XML中提取所需要的数据。解析器从文档中提取实际的数据,然后创建一系列的事件或者是新的数据结构。解析器也能够检查文档是否是well-formed,
也就是说是否严格的遵守了XML规范,而这是处理XML文档之前就必须进行的工作。另外,解析器还应该能够判断一个文档是否遵守DTD/Schema标准,如果该文档有一个DTD/Schema的话。我们知道,XML不像HTML,它本身不关心应用程序如何展示它的内容,而关于内容的展示形式可以由CSS或者XSL来指定。所以一个良好的XML解析器还需要对CSS和XSL进行分析处理。
解析器的不同不仅在于它们是否支持完整性检查和文档表现形式转化,而且还在于它处理文档的方式。基于事件的解析器实际上是通过串行的方式来处理文档,也就是说当它遇到一个开始或者结束标记的时候,它向应用程序发送消息,由应用程序决定如何进行处理。SAX就是这样的一个API集合。第二种方法就是根据文档的内容建立一个层次的数据结构,这就是DOM API的工作方式。实际上,一个解析器的质量的好坏的评定标准在于它对XML标准的支持程度。当前最好的是Sun 的解析器。
一个XML解析器可以支持多个API接口,如DOM接口或SAX接口,可以把这些解析器称为DOM解析器或SAX解析器。现在比较常用的解析器有DOM解析器、SAX解析器、DOM4J和JDOM等。
●DOM
DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。
另一方面,对于特别大的文档,解析和加载整个文档可能很慢且很耗资源,因此使用其他手段来处理
这样的数据会更好。这些基于事件的模型,比如SAX。
●SAX
SAX的处理非常类似于流媒体。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。
●JDOM
JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用D OM实现更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。正在考虑通过“Java规范请求JSR-102”将它最终用作“Java标准扩展”。从2000年初就已经开始JDOM开发。
●DOM4J
DOM4J代表了完全独立的开发结果,但最初,它是JDOM的一种智能分支。
它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Sch ema支持以及用于大
文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,它通过DOM4J API和标准DOM接口具有并行访问功能。从2000下半年开始,它就一直处于开发之中。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论