• 1.摘要
  • 2.基本简介
  • 3.文档解析
  • 4.事件通知
  • 5.解析实例
  • 6.功能设置

SAX

3
电脑技术、编程

在采用DOM之后性能受到严重影响的情况下,使用Simple APIfor XML(SAX)。在用DOM耗费较长时间解析XML文件以后,你可能注意到在用DOM处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的:这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存。

基本简介

SAX最初是由DavidMegginson采用Java语言开发的,之后SAX很快在Java开发者中流行起来。SAN项目现在负责管理其原始API的开发工作,这是一种公开的、开放源代码软件。不同于其他大多数XML标准的是,SAX没有语言开发商必须遵守的标准SAX参考版本。因此,SAX的不同实现可能采用区别很大的接口。不过,所有的这些实现至少有一个特性是完全一样的,这就是事件驱动。

相当多的SAX实现都可以从网上获得。不幸的是,它们之间稍有不同,但其大多数都提供了相应的帮助文档。以下是一些流行的SAX实现:最“标准”的Java版本在SAX项目网站。

Microsoft XML Core Services4.0库包括了采用COM的SAX解析器,对VB程序员特别有用(或开发Windows的程序员)。

支持Perl的binding of SAX2.0。

SAXinC++是一套用在SAX和C++应用程序中的C++接口和封装类。许多编程语言,比如Python和所有的.NET语言都在其核心功能中内建支持SAX。

文档解析

在SAX解析器装载XML文件时,它遍历文件文档并在其主机应用程序中产生事件(经由回调函数、指派函数或者任何可调用平台完成这一功能)表示这一过程。这样,编写SAX应用程序就如同采用最现代的工具箱编写GUI程序。

大多数SAX实现都会产生以下若干类型的事件:

在文档的开始和结束时触发文档处理事件。

在文档内每一XML元素接受解析的前后触发元素事件。任何元数据通常都由单独的事件交付。

在处理文档的DTD或Schema时产生DTD或Schema事件。

错误事件用来通知主机应用程序解析错误。

显而易见,在处理文档时你最关心的就是元素事件了。通常,SAX解析器会向你的主机应用程序提供包含元素信息的事件参数;在最低程度下也会提供元素的名字。具体取决于你的特定实现,可以定义不同类型的元素事件代表不同类型元素的处理。例如,注释元素(它可能包含主机应用程序的处理指令)就经常在接受处理时产生特殊的事件。

事件通知

假如把程序清单A中的XML文件装入了SAX解析器,那么你可能会在你的主机应用程序中收到以下事件通知:

DocumentStart

ElementStart“catalog”

ElementStart“book”