Java_SAX程序设计_第1页
Java_SAX程序设计_第2页
Java_SAX程序设计_第3页
Java_SAX程序设计_第4页
Java_SAX程序设计_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第16讲 Java SAX程序设计2Java SAX程序设计 SAX解析基本原理 SAX解析XML的模式 SAX解析属性数据 使用处理指令处理XML数据 处理SAX解析过程中的错误信息 SAX过滤器(Filter)3SAX解析基本原理 以流的方式分析XML文件中的数据 处理过程上“读入一段数据,处理一段数据” 优点:节省计算机内存 缺点:CPU负担比较重,算法设计工作量繁琐4SAX分析器的分类主动型解析器 由解析器主动逐次读入XML数据片段进行分析,并将分析的结果以事件形式通知应用程序的事件处理器 Java技术中多数的SAX解析器是主动型被动型解析器 由应用程序以数据读写形式,逐次从XML文

2、件中读入数据,应用程序是整个数据处理过程的触发者,SAX解析器只是被动地按照应用程序的要求,从XML数据文件中依次读入数据5SAX解析XML的模式 SAX解析XML数据的基本机制是广播。在程序的结构中存在以下几个关键类: SAX事件接收器,接收SAX分析XML数据过程中的信息 SAX分析器,对XML数据文件进行分析的主体程序 XML数据文件,其中存储了被分析的数据。 一个SAX解析器可以同时向多个解析事件处理器广播事件6SAX核心接口列表7 使用SAX处理XML文件的基本思路是编写实现上面相应接口的类,并使用该类监听对应的事件信息。 目前有几种成熟使用SAX处理XML数据的方式: XMLRea

3、der方式 DefaultHandler 模式 HandlerBase模式8XMLReader模式 XMLReader是SAX中常用的一个接口。使用该接口可以对XML数据文件进行分析并以回调的形式将分析过程中得到的各种信息,发送给相应的处理器 通过XMLReader接口,实现XML事件处理器的注册 SAXParserFactory saxF = SAXParserFactory.newInstance(); SAXParser saxParser = saxF.newSAXParser(); XMLReader xmlReader = saxParser.getXMLReader(); xml

4、Reader.setContentHandler(new MyHandler(); xmlReader.parse(new InputSource(9-1.xml); 事件处理器需要实现SAX中的特定接口,并处理特定XML事件 接口中所有的方法必须给出实现 这种模式概念直观,但程序开发工作量大9DefaultHandler模式DefaultHandler类实现了SAX标准中的各个接口,对接口中的方法给出了默认实现,该类位于org.xml.sax.helpers包中;通过继承DefaultHandler类,并重写特定方法,实现SAX事件处理器的开发;采用了典型的Adapter设计模式提高了程序的

5、开发效率,但比XMLReader模式抽象,是主流的Java SAX程序设计方法。演示 test.java10HandlerBase模式 HandlerBase模式和DefaultHandler模式类似 HandlerBase模式主要应用于一些早期的Java产品中 HandlerBase主要实现了SAX1.0中的一些核心接口 DocumentHandler接口,负责文档内容处理,是SAX1.0中的接口 DTDHandler接口, 负责DTD部分处理 EntityResolver接口,负责实体部分的解析 ErrorHandler接口,负责解析错误的处理 示例程序 sax.xml TestSax.j

6、ava11HandlerBase模式 该方法整体上将XML文件看作一个大的字符串(包括空格和换行)。SAX事件处理器依次扫描该字符串序列,将遇到的内容按照不同类型分成以下几种: 处理指令 开始标记 普通字符串 结束标记 空格 文档结束 演示 TestSax.java(基于SAX1.0标准的,而test.java是基于SAX2.0标准的)12SAX解析属性数据 SAX通过Attributes接口处理XML数据中的标记属性,在xml中,属性被建模成和标记地位相当的对象模型,一个属性数据通常包括以下属性: 名称空间的URI 本地名称(没有前缀的名称) 受限名称 值 类型13SAX解析属性数据 Att

7、ributes中的方法分别提供了对上面各个属性的读写途径。 Attributes接口中的各成员及其功能如下: getLength:标记属性的个数 getURI:名称空间的URI,如果没有则为空字符串。 getLocalName:本地名称,如果没有执行名称空间处理工作,就是空字符串 getQName:XML1.0的受限名 getType:用字符串表示的属性类型,属性类型是DTD中支持的各种类型之一 getValue:使用字符表示的属性值 getIndex:属性的索引14SAX解析属性处理的模式 ContentHandler接口方法中,提供了操作节点属性的方法。 /*20*/ public void startElement(String uri, String localName, /*21*/ String qName, Attributes atts) throws SAXException /*22*/ /*23*/ if(student.equals(qName) /*24*/ /*25*/ int n = atts.getLength(); /*26*/ for (int i = 0; i n; i+) /*27*/ /*28*/ System.out.pri

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论