网站大量收购闲置独家精品文档,联系QQ:2885784924
  1. 1、本文档共31页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
XML NO9课件

第9章 SAX;章节结构;9.1 SAX简介;什么是SAX 读取和操纵 XML 文件的标准方法是 DOM(“文档对象模型”)。遗憾的是,这种方法需要读取整个文件并将它存储到树结构中,因而效率不高、缓慢,并且会过度使用资源。 一种替代方法是使用 Simple API for XML (SAX)。SAX 允许正在读取 文档时处理该文档,这避免了在采取操作之前需要等待存储文档的所有内容。 SAX 是由 XML-DEV 邮件列表的成员开发的,Java 版本由 David Megginson 维护。他们的目的是提供一种更自然的方法来使用 XML, 这种方法不会涉及到使用 DOM 的那种开销。 ; 结果是基于事件的 API。解析器将事件(譬如,元素的开始或结束)发送给 处理信息的事件处理程序。然后,应用程序自己可以处理数据。虽然原始文 档保持不变,但 SAX 提供了操纵数据的方法,然后会将该方法导向另一个过 程或文档。 对于 SAX,没有官方的标准;万维网(W3C)或其它官方组织不维护 SAX, 但在 XML 社区中,它是一个事实上的标准。 ;SAX(Simple API for XML)简易应用程序编写接口。 它是一种社区性质的讨论产物。几乎所有的XML解析器都会支持它。与DOM比较而言,SAX是一种轻量型的方法。;使用SAX MSXML组件同时封装了多种与XML有关的解译程序接口和相关规格 DOM的level 1和level 1 SAX 1和SAX 2 与MSXML有关的工具MSXML SDK,用户可以查询MSXML组件内封装的XML规格与类别信息;虚拟的SAX SAX提供简单的应用程序接口。 一套虚拟的接口,其中并未包含任何的程序实例,虚拟接口中的函数须由用户来实作 ;SAX的运行方式 事件驱动 SAX属于事件驱动模式 SAX加载XML 文件后,须等到调用特定函数时才开始进行解译; 在调用解译启动函数之前,将事件处理函数注册到SAX对象中 解译时遇到用户要接收的事件,SAX就发出信息通知用户 如图9-6(p179);SAX是如何工作的;SAX Event Timeline;单向运行 SAX解译XML文件时,每次只创建一部分,不会在内存中创建一个与XML文件相同的树状结构 ;SAX的优点 节省内存资源 DOM需要将XML文件完全加载到内存;SAX是单向运行解译程序,在内存中保存一小部分的数据,内存弹性大 若XML文件内的数据量少且数据变动性大,采用DOM,用双向方式对所有节点进行操作;若数据量大,且数据变动性较少,采用SAX的单向方式 提高对特定项目的控制权 变动性大的数据,采用DOM 与网络有关,交换数据少,采用SAX,效率高,灵活性强,对特定项目的控制权可达到最大 可中断的解译过程 SAX单向运行,每次加载一部分数据到内存,若解译遇到问题马上取消解译操作或停止解译 ;选择 DOM 还是 SAX,这取决于几个因素: 应用程序的目的:如果必须对数据进行更改,并且作为 XML 将它输出,则在大多数情况下,使用 DOM。与使用 XSL 转换来完成的简单结构更改不一样,如果是对数据本身进行更改,则尤其应该使用 DOM。 数据的数量:对于大文件,SAX 是更好的选择。 将如何使用数据:如果实际上只使用一小部分数据,则使用 SAX 将数据抽 取到应用程序中,这种方法更好些。另一方面,如果知道将需要向后引用已经 处理过的信息,则 SAX 可能不是正确的选择。 需要速度:通常,SAX 实现比 DOM 实现快。 记住 SAX 和 DOM 不是互斥的,这一点很重要。可以使用 DOM 来创建事件的 SAX 流,可以使用 SAX 来创建 DOM 树。事实上,大多数解析器实际常常使用 SAX 来创建 DOM 树! ;9.2 SAX的界面介绍;xml.org.sax提供的事件是SAX1中的核心事件,共17种,较重要的事件有:ContentHandler、DTDHandler、EntityResolver、errorHandler 参见表9-1(p182) xml.org.sax.ext包中主要规范SAX2的接口 xml.org.sax.helper包提供helper类 Helper类是一种辅助性的角色,主要作为SAX解译器与程序间的中介者 通过Helper类让创建SAX对象的操作封装在Helper类中,所有对文件的存取都是通过Helper类运行;9.3 实作SAX程序;ContentHandler;创建ErrorHandler 当然总会有可能在试图进行解析时,数据有问题。在这样的情况下,有一个处理程序来处理错误和内容将是有帮助的。 就如同创建内容处理程序一样,可以创建出错处理程序。 需要关注的事件有三个:警告、错误和致命错误。 见表9-3(p198)

文档评论(0)

gm8099 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档