选择显示字体大小

掌握sax

在用dom耗费较长时间解析xml文件以后,你可能注意到在用dom处理大型文件时其性能下降的非常厉害。这个问题是由dom的树结构所造成的:这种结构占用的内存较多,而且dom必须在解析文件之前把整个文档装入内存。在采用dom之后性能受到严重影响的情况下,你不妨考虑使用simple api for xml(sax)。在这篇文章中,我们就为你介绍sax api,同时提出若干采用不同语言实现的sax链接。

sax最初是由david megginson采用java语言开发的,之后sax很快在java开发者中流行起来。san项目现在负责管理其原始api的开发工作,这是一种公开的、开放源代码软件。不同于其他大多数xml标准的是,sax没有语言开发商必须遵守的标准sax参考版本。因此,sax的不同实现可能采用区别很大的接口。不过,所有的这些实现至少有一个特性是完全一样的,这就是事件驱动。 
事件驱动的文档解析
在sax解析器装载xml文件时,它遍历文件文档并在其主机应用程序中产生事件(经由回调函数、指派函数或者任何可调用平台完成这一功能)表示这一过程。这样,编写sax应用程序就如同采用最现代的工具箱编写gui程序。
大多数sax实现都会产生以下若干类型的事件:
在文档的开始和结束时触发文档处理事件。 
在文档内每一xml元素接受解析的前后触发元素事件。任何元数据通常都由单独的事件交付。
在处理文档的dtd或schema时产生dtd或schema事件。
错误事件用来通知主机应用程序解析错误。
显而易见,在处理文档时你最关心的就是元素事件了。通常,sax解析器会向你的主机应用程序提供包含元素信息的事件参数;在最低程度下也会提供元素的名字。具体取决于你的特定实现,可以定义不同类型的元素事件代表不同类型元素的处理。例如,注释元素(它可能包含主机应用程序的处理指令)就经常在接受处理时产生特殊的事件。
下面我们就举个比较基本的例子。假如你把程序清单a中的xml文件装入了sax解析器,那么你可能会在你的主机应用程序中收到以下事件通知:
document start
element start "catalog"
element start "book"
element start "author"
data "adams, lamont"
element end "author"
element start "title"
data "lamont’s first book"
element end "title"
element end "book"
element end "catalog"
document end

sax对dom
在什么情况下采用这种或者那种api并没有确定的严格规则;具体情况具体分析。所有的sax处理都在一次遍历中完成的;因此,在解析同等大小的文档时sax通常会相比dom提供更好的性能(因为dom必须遍历树结构)。此外,与dom是比,因为在给定的时间之内只需要xml文档的一部分装入内存,所以sax 通常在处理更大文件时内存的利用效率也来得更高(我已经提到过,dom在开始解析文档之前必须把全部xml文档装入内存)。
然而,sax也不是没有缺点。sax应用程序一般都比较长,程序中充斥着大量的if/else结构用来确定处理特定元素时所采用的运动。同样的,处理多个xml元素之间散布的数据结构也很成问题,因为解析事件之间必须保存中间数据。最后, sax应用程序的事件处理结构一般意味着sax应用程序是针对特定文件结构定制构建的,而dom应用程序则更具一般性。
从哪里获得sax
相当多的sax实现都可以从网上获得。不幸的是,它们之间稍有不同,但其大多数都提供了相应的帮助文档。以下是一些流行的sax实现:
当然,最“标准”的java版本在sax项目网站。 
microsoft xml core services 4.0 库包括了采用com的sax解析器,对vb程序员特别有用(或开发windows的程序员)。 
支持perl的binding of sax 2.0。 
sax in c++ 是一套用在sax和c++应用程序中的c++接口和封装类。 
许多编程语言,比如python和所有的.net语言都在其核心功能中内建支持sax。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons