解析技术
XML的处理技术
XML不仅仅是一种标记语言,而是一系列技术,如DTD,XSD,DOM,SAX,XSL,XPointer,SMIL等的集合体。这一技术家族为我们开发可扩展性和互操作性的软件提供了一种解决方案,目前广泛应用于系统配置,数据存储及数据交换的格式等,它是Web服务的基础,也是现代面向服务的架构(SOA)设计模式的基础。
为了有效使用XML,需要通过一个XML处理器或XML API 来访问其数据。目前(JSR 206)的两种处理XML文档的方法已经得到了广泛应用,分别是DOM和SAX。
DOM文档对象模型是一种通过编程方式对XML文档的数据及结构进行访问的标准,基于XML文档在内存中的树状结构,当一个XML文件被装入处理器时,内存中建立一棵相应的树。DOM还定义了用来遍历一棵XML树及管理各个元素,值和属性的编程接口(包括方法个属性的名字)。
DOM标准的一个主要不足在于将整个XML文档装入内存所引起的巨大内存开销。当文件的数量非常大时,这会带来很大的性能瓶颈。于是人们开始创立一种新的标准,就是SAX。
SAX是一种非常简单的XML API。它允许开发者使用事件驱动的XML解析。与DOM不同,SAX并不要求将整个XML 文件一起装入内存。它的想法十分简单,一旦XML处理器完成对XML元素的操作,它就立刻调用一个自定义事件处理器及时处理这个元素及相关数据。
虽然SAX解决了DOM速度慢,内存占用大的问题,但在灵活性方面收到很大制约,如无法随机访问文档。于是一种新的基于流的Stream API for XML(简称StAX)逐步出现在人们的视野中,它不仅提高了XML的处理速度,而且较好地兼顾了灵活性。StAX是JSR 173的标准。
StAX如其名称所暗示的那样,把重点放在流上。实际上,StAX与其他方法的区别就在于应用程序能够把XML当作一个事件流来处理。将XML当作一个事件流来吹的想法并不新颖(事实上SAX已经提出来了),但StAX并不使用SAX的 推 模型,而是使用 拉 模型进行事件处理。此外 StAX 解析器也不使用会调机制,而是根据应用程序的要求返回事件。StAX还提供了用户友好的API,用于读入和写出。
StAX实际上包括两套处理XML的API,分别提供了不同程度的抽象。基于指针的API允许应用程序把XML作为一个标记(或事件)流来处理,。应用程序可以检查解析器的状态,获得解析的上一个标记信息,然后再处理下一个标记信息,以此内推。这是一种低层API,尽管效率高,但是没有提供底层XML结构的抽象。较为高级的基于迭代器的API允许应用程序把XML作为一系列事件对象来处理,每个对象和应用程序交换XML 结构的一部分。应用程序只需确定解析事件的类型,将其转换成对应的具体类型,然后利用其方法获得属于该事件的信息即可。
DOM,SAX,StAX技术都是从XML的角度处理文档和建立模型,这对于只关注文档XML结构的应用程序来说是适用的,但是很多应用程序仅仅将XML作为数据交换的媒介,更多关注的是文档数据本身,为此人们又提出了一种XML数据绑定的技术,可以使应用程序在很大程度上忽略XML文档的实际结构,,而直接使用文档的数据内容。
数据绑定是指将数据从一些存储媒介(如XML文档和数据库)中取出,并通过程序表示这些数据的过程,即把数据绑定到虚拟机能够理解并且可以操作的某种内存结构中。数据绑定并不是一个新鲜的概念,它在关系数据库上早已经=的骚广泛的应用,如Hibernate就是针对数据库的轻量级数据绑定框架。而针对XML数据绑定的Castor框架在2000年就已经出现,目前已经涌现出许多类似的框架,如 JAXB,JiBX,Quick和Zeus等。
网友评论