- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第16讲 Java SAX程序设计 Java SAX程序设计 SAX解析基本原理 SAX解析XML的模式 SAX解析属性数据 使用处理指令处理XML数据 处理SAX解析过程中的错误信息 SAX过滤器(Filter) SAX解析基本原理 以流的方式分析XML文件中的数据 处理过程上“读入一段数据,处理一段数据” 优点:节省计算机内存 缺点:CPU负担比较重,算法设计工作量繁琐 SAX分析器的分类 主动型解析器 由解析器主动逐次读入XML数据片段进行分析,并将分析的结果以事件形式通知应用程序的事件处理器 Java技术中多数的SAX解析器是主动型 被动型解析器 由应用程序以数据读写形式,逐次从XML文件中读入数据,应用程序是整个数据处理过程的触发者,SAX解析器只是被动地按照应用程序的要求,从XML数据文件中依次读入数据 SAX解析XML的模式 SAX解析XML数据的基本机制是广播。在程序的结构中存在以下几个关键类: SAX事件接收器,接收SAX分析XML数据过程中的信息 SAX分析器,对XML数据文件进行分析的主体程序 XML数据文件,其中存储了被分析的数据。 一个SAX解析器可以同时向多个解析事件处理器广播事件 SAX核心接口列表 使用SAX处理XML文件的基本思路是编写实现上面相应接口的类,并使用该类监听对应的事件信息。 目前有几种成熟使用SAX处理XML数据的方式: XMLReader方式 DefaultHandler 模式 HandlerBase模式 XMLReader模式 XMLReader是SAX中常用的一个接口。使用该接口可以对XML数据文件进行分析并以回调的形式将分析过程中得到的各种信息,发送给相应的处理器 通过XMLReader接口,实现XML事件处理器的注册 SAXParserFactory saxF = SAXParserFactory.newInstance(); SAXParser saxParser = saxF.newSAXParser(); XMLReader xmlReader = saxParser.getXMLReader(); xmlReader.setContentHandler(new MyHandler()); xmlReader.parse(new InputSource(9-1.xml)); 事件处理器需要实现SAX中的特定接口,并处理特定XML事件 接口中所有的方法必须给出实现 这种模式概念直观,但程序开发工作量大 DefaultHandler模式 DefaultHandler类实现了SAX标准中的各个接口,对接口中的方法给出了默认实现,该类位于org.xml.sax.helpers包中; 通过继承DefaultHandler类,并重写特定方法,实现SAX事件处理器的开发; 采用了典型的Adapter设计模式提高了程序的开发效率,但比XMLReader模式抽象,是主流的Java SAX程序设计方法。 演示 test.java HandlerBase模式 HandlerBase模式和DefaultHandler模式类似 HandlerBase模式主要应用于一些早期的Java产品中 HandlerBase主要实现了SAX1.0中的一些核心接口 DocumentHandler接口,负责文档内容处理,是SAX1.0中的接口 DTDHandler接口, 负责DTD部分处理 EntityResolver接口,负责实体部分的解析 ErrorHandler接口,负责解析错误的处理 示例程序 sax.xml TestSax.java HandlerBase模式 该方法整体上将XML文件看作一个大的字符串(包括空格和换行)。SAX事件处理器依次扫描该字符串序列,将遇到的内容按照不同类型分成以下几种: 处理指令 开始标记 普通字符串 结束标记 空格 文档结束 演示 TestSax.java(基于SAX1.0标准的,而test.java是基于SAX2.0标准的) SAX解析属性数据 SAX通过Attributes接口处理XML数据中的标记属性,在xml中,属性被建模成和标记地位相当的对象模型,一个属性数据通常包括以下属性: 名称空间的URI 本地名称(没有前缀的名称) 受限名称 值 类型 SAX解析属性数据 Attributes中的方法分别提供了对上面各个属性的读写途径。 Attributes接口中的各成员及其功能如下: getLength:标记属性的个数 getURI:名称空间的URI,如果没有则为空字符串。 getLocalName:本地名称,如果没有执行名称空间处理工作,就是空字符串 getQName:
文档评论(0)