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