SAX解析XML原理

SAX解析XML原理

ID:38265397

大小:17.96 KB

页数:7页

时间:2019-06-07

SAX解析XML原理_第1页
SAX解析XML原理_第2页
SAX解析XML原理_第3页
SAX解析XML原理_第4页
SAX解析XML原理_第5页
资源描述:

《SAX解析XML原理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、SAX是一个用于处理XML事件驱动的“推”模型,虽然它不是W3C标准,但它却是一个得到了广泛认可的API。SAX解析器不像DOM那样建立一个完整的文档树,而是在读取文档时激活一系列事件,这些事件被推给事件处理器,然后由事件处理器提供对文档内容的访问。  常见的事件处理器有三种基本类型:  ●用于访问XMLDTD内容的DTDHandler;  ●用于低级访问解析错误的ErrorHandler;  ●用于访问文档内容的ContentHandler,这也是最普遍使用的事件处理器。  图2显示了SAX解析器如

2、何通过一个回调机制报告事件。解析器读取输入文档并在处理文档时将每个事件推给文档处理器(MyContentHandler)。  与DOM相比,SAX解析器能提供更好的性能优势,它提供对XML文档内容的有效低级访问。SAX模型最大的优点是内存消耗小,因为整个文档无需一次加载到内存中,这使SAX解析器可以解析大于系统内存的文档。另外,你无需像在DOM中那样为所有节点创建对象。最后,SAX“推”模型可用于广播环境,能够同时注册多个ContentHandler,并行接收事件,而不是在一个管道中一个接一个地进行处

3、理。  SAX的缺点是你必须实现多个事件处理程序以便能够处理所有到来的事件,同时你还必须在应用程序代码中维护这个事件状态,因为SAX解析器不能交流元信息,如DOM的父/子支持,所以你必须跟踪解析器处在文档层次的哪个位置。如此一来,你的文档越复杂,你的应用逻辑就越复杂。虽然没有必要一次将整个文档加载到内存中,但SAX解析器仍然需要解析整个文档,这点和DOM一样。  也许SAX面临的最大问题是它没有内置如XPath所提供的那些导航支持。再加上它的单遍解析,使它不能支持随机访问。这一限制也表现在名字空间上:

4、对有继承名字空间的元素不做注解。这些限制使SAX很少被用于操作或修改文档。  那些只需要单遍读取内容的应用程序可以从SAX解析中大大受益。很多B2B和EAI应用程序将XML用做封装格式,接收端用这种格式简单地接收所有数据。这就是SAX明显优于DOM的地方:因高效而获得高吞吐率。在SAX2.0中有一个内置的过滤机制,可以很轻松地输出一个文档子集或进行简单的文档转换。  SAX  SAX,全称SimpleAPIforXML,既是指一种接口,也是指一个软件包。SAX最初是由DavidMegginson采用J

5、ava语言开发,之后SAX很快在Java开发者中流行起来。San现在负责管理其原始API的开发工作,这是一种公开的、开放源代码软件。不同于其他大多数XML标准的是,SAX没有语言开发商必须遵守的标准SAX参考版本。因此,SAX的不同实现可能采用区别很大的接口。  作为接口,SAX是事件驱动型XML解析的一个标准接口(standardinterface)不会改变,已被OASIS(OrganizationfortheAdvancementofStructuredInformationStandards)所

6、采纳。作为软件包,SAX最早的开发始于1997年12月,由一些在互联网上分散的程序员合作进行。后来,参与开发的程序员越来越多,组成了互联网上的XML-DEV社区。五个月以后,1998年5月,SAX1.0版由XML-DEV正式发布。目前,最新的版本是SAX2.0。2.0版本在多处与1.0版本不兼容,包括一些类和方法的名字。  SAX的原理  SAX的工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)开始与结束、文档(document)结束等地方时通

7、知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。  大多数SAX实现都会产生以下类型的事件:  在文档的开始和结束时触发文档处理事件。  在文档内每一XML元素接受解析的前后触发元素事件。  任何元数据通常都由单独的事件交付。  在处理文档的DTD或Schema时产生DTD或Schema事件。  产生错误事件用来通知主机应用程序解析错误。  SAX的常用接口介绍  ContentHandler接口  ContentHandler是Java类包中一个特殊的SAX接口,位于or

8、g.xml.sax包中。该接口封装了一些对事件处理的方法,当XML解析器开始解析XML输入文档时,它会遇到某些特殊的事件,比如文档的开头和结束、元素开头和结束、以及元素中的字符数据等事件。当遇到这些事件时,XML解析器会调用ContentHandler接口中相应的方法来响应该事件。  ContentHandler接口的方法有以下几种:  voidstartDocument()  voidendDocument()  voidstartElement(St

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。