资源描述:
《ch7SAX解析XML文档》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第七章SAX解析XML文档学习目标掌握SAX的概念和特点理解SAX的工作机制了解SAX的常用接口熟练掌握SAX解析XML文档的步骤熟练掌握解析器和事件处理器的创建和使用掌握SAX和DOM共同构建XML文档基于DOM的解析器的核心是在内存中建立和XML文档相对应的树状结构。XML文件的标记、标记中的文本数据和实体等都是内存中的树状结构的某个节点相对应。优点:可以方便地操作内存中的树状节点缺点:如果XML文件较大,或者只需要解析XML文档的一部分数据,就会占用大量的内存空间SAX简介SAX没有官方的标准机构,它不属于任何标
2、准组织或团体,也不属于任何公司或个人,而是供任何人使用的一种计算机技术。SAX是XML事实上的标准,所有的XML解析器都支持它,已经被Java,C#等语言编写实现SAX是一种基于事件的APISAX概述SAX是SimpleAPIforXML,简易应用程序编写接口。解析的核心是事件处理机制,具有占用内存少,效率高等特点。SAX是一种高效的解析器,在对那些要处理大量数据的应用程序,这种特性尤为重要。它允许在读取文档时处理它,而不必等到整个文档都被存储之后才采用该操作。SAX的工作机制【重点掌握】SAX在概念上与DOM完全不同
3、。它采用事件机制的方式来解析XML文档。使用SAX解析器对XML文档进行解析时,会触发一系列事件,这些事件将被相应的事件监听器监听,从而触发相应的事件处理方法,应用程序通过这些事件处理方法实现对XML文档的访问。大多数的SAX都会实现以下几种类型的事件在文档的开始和结束时触发文档处理事件在文档内每一个XML元素都在接受解析的前后触发元素事件。任何元数据通常都是由单独的事件交付。这是我们最关心的事件。通常,SAX解析器会向应用程序提供包含元素信息的事件参数,在最低程度上也会提供元素的名字。在处理文档的DTD或Schema
4、时产生DTD或Schema事件错误事件用来通知主机应用程序解析错误SAX解析器在解析开始的时候就开始发送事件,当解析器开始处理文档开始,元素开始和文本时,负责在文档中触发一个事件,而程序员则实现这些事件监听器,这些监听器负责处理这些事件——事件中包含了XML元素的内容。SAX解析器调用处理器方法DTD(可选)XML源startDocumentstartElmentcharatersendElmentendDocumentEtc….输出SAX解析器根本不创建任何对象,它只是在遇到XML文档的各种标签时触发对应的事件,并将
5、XML元素的内容封装成事件传出去。而程序员则负责提供事件监听器来监听这些事件,并通过事件获取XML文档信息。SAX监听器【重点掌握】SAX解析事件一共有4种,因此需要分别设置4种监听器。ContentHandler:监听XML文档内容处理事件的监听器DTDHander:监听DTD处理事件的监听器EntityResolver:监听实体处理事件的监听器ErrorHandler:监听解析错误的监听器在ContentHandler接口中定义了如下方法:voidcharacters(char[]ch,intstart,intle
6、ngth):SAX解析器处理字符数据时触发该方法voidendDocument():SAX解析器处理文档结束时触发该方法voidendElement(Stringuri,StringlocalName,StringqName):SAX解析器处理元素结束时触发该方法voidendPrefixMapping(Stringprefix):SAX解析器处理元素里命名空间属性(即xmlns:prefix属性)结束时触发该方法voidignorableWhitesapce(char[]ch,intstart,intlength):
7、SAX解析器处理元素内容中可忽略的空白时触发该方法voidskippedEntity(Stringname):SAX解析器跳过实体时触发该方法voidstartDocument():SAX解析器开始处理文档时触发该方法voidstartElement(Stringuri,StringlocalName,StringqName,Attributesatts):SAX解析器开始处理元素时触发该方法voidstartPrefixMapping(Stringprefix,Stringuri):SAX解析器开始处理元素里命名空间
8、属性(即xmlns:prefix属性)时触发该方法SAX解析器【重点掌握】JAXP为SAX解析器提供了如下2组API:XMLReader和XMLReaderFactoryXMLReaderFactory工厂类createXMLReader()静态方法用于创建XMLReader。这两个类位于org.xml.sax包下。SAXPars