1、第四卷:第四卷:XML解析器简单XML应用程序编程接口(SAX)2回顾q DOM是一组独立于语言和平台的应用程序编程接口,描述如何访问和操纵存储在结构化XML文档中的信息q DOM可以表示树状结构q 了解W3C为DOM提供一系列API,以供应用程序调用q 掌握DOM API的核心接口q 对结点的操作包括读取、添加、删除、替换和创建,掌握用java实现这些操作的方法3目标q 描述SAX的基本内容q 描述SAX的事件驱动模型q 解释SAX解析器是如何工作的q 列出SAX接口并描述相关的方法q 与DOM之间的比较4基本知识qSAX解析器的特征 SAX(Simple API for XML)是一种采用
2、流式Streaming机制读取并分析XML文档的工具。将其解析所得的元素与属性、文本内容、注释等信息作为“事件”顺序地抛出,交由处理程序来处理。q特征1.基于事件处理,这与DOM将整个文档加载到内存后再处理有很大区别;2.在处理大型文档时,SAX将其化整为零,一般就只有一个元素或文本结点保存在内存中,让事件处理程序处理。处理完毕后,释放该元素或结点占用的内存。3.随时中断处理;4.只读只进的SAX与随机存取的DOM5SAX接口UML类图XMLReader(读取文档)getContentHandler()setCOntentHandler()getEntityResolver()setEntit
3、yResolver()getDTDHandler()setDTDHandler()getErrorHandler()setErrorHandler()Parse()ContentHandler(处理内容)startDocument()endDocument()startPrefixMapping()endPrefixMapping()startElement()endElement()characters()processingInstruction()Attributes(属性)getValue()getURI()getLocalName()getRawName()getType()getL
4、ength()DeclHandler(处理声明)elementDecl()attributeDecl()internalEntityDecl()externalEntityDecl()EntityResolver(解析实体)resolveEntity()DTDHandler(处理DTD)notationDecl()unparsedEntityDecl()ErrorHandler(处理文档错误)warning()error()fatalError()6SAX接口q 整个SAX以XML Reader接口为中心,读取器在执行parse方法时分析文档,自动调用其依赖的ContentHandler、De
5、clHandler、LexicalHandler、EntityResolve和ErrorHandler接口就是SAX的事件处理器。q 使用SAX处理文档的要点一般如下:创建XMLReader实例,通常使用XMLReaderFactory类的createXMLReader方法生成XMLReader接口实例。实现SAX的事件处理器:在程序中定义新的类,该类实现处理内容所需的接口。绑定处理器:创建事件处理器的实例,用XMLReader实例的setContentHandler等方法将其绑定到XMLReader中 分析文档:调用XMLReader中的parse方法,开始分析文档 实现事件处理器的具体功能
6、 终止处理:程序抛出SAXException(无论是否读完XML文档)7使用Java创建SAXq示例编写SAX程序将上述的XML文档解析8代码自定义类继承DefaultHandler,该类实现ContentHandler接口通过工厂生成XMLReader,用setContentHandler方法绑定事件处理器类saxtest,利用parse方法解析文档startDocument方法在开始分析文档时,自动调用endDocument()方法在文档末尾时,自动调用startElement()方法在读取元素开始标记时调用endElement()方法在读取元素结束标记时调用9代码遇到文本内容时调用该方法
7、10运行结果解析结果11运行过程在文档开头,解析器调用ContentHandler中的startDocument方法遇到元素开始标记时,调用ContentHandler中的startElement方法,读取其文本内容调用ContentHandler中的characters方法处理内容,然后遇到元素的结束标记调用ContentHandler中的endElement方法。到达文档结尾,调用ContentHandler中的endDocument方法解析器从parse方法返回到调用程序,调用程序的其它代码,程序结束。12应用q如果要解析XML文档中的DOCTYPE,实现以下接口DeclHandler接
8、口实现接口DeclHandler处理DOCTYPE绑定事件处理器处理DOCTYPE13DeclHandler接口代码在遇到DTD中声明的属性列表ATTLIST时,对其中定义的各个属性一一调用此方法在遇到DTD中声明的元素ELEMENT时,调用此方法实现DeclHandler接口中的所有方法14运行结果结果teams.dtd15应用q如果要解析XML文档的版本声明获取XML版本16运行结果17SAX接口参考qXMLReader接口注册相应处理器18解析器属性Propertyq 解析器的属性名称以URL的形式定义,以http:/xml.org/sax/properties/开头,后面跟上一个标识符
9、,其属性值是Object类型实现DeclHandler接口19ContentHandler接口q 内容处理器用于处理XML文档中最重要的元素和文本内容,使用XMLReader接口的setContentHandler方法将其注册到解析器中20Attributes接口q属性列表被作为参数传入到ContentHandler接口的startElement回调函数。21代码分析-1参数类型22DeclHandler接口q声明处理器用于处理DTD中声明的元素和属性。使用XMLReader接口的”setProperty”注册声明处理器23代码分析-224DefaultHandler类q默认处理器 该类实现了
10、上述ContentHandler、EntityResolver、DTDHandler和ErrorHandler这四个处理器接口。通常,使用该类的继承,导入包 import org.xml.sax.helpers25DefaultHandler类26DOM与SAX的比较qSAX是基于事件处理回调qSAX的执行速度快,不占用过多的内存q对于SAX,实现DefaultHandler接口中的方法,在解析过程中会有大量回调方法的使用,DOM不存在回调q对于小文档DOM适用,大文档SAX适用qSAX适于只读XML,而DOM可以涉及更新XML27总结q描述SAX的基本内容q描述SAX的事件驱动模型q解释SAX解析器是如何工作的q列出SAX接口并描述相关的方法q与DOM之间的比较28课堂测验试编写一段SAX程序,遍历上述的XML文档Test.xml态度决定命运,专注成就人生!态度决定命运,专注成就人生!Thanks!
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。