文档

Java™ 教程
隐藏目录
XML API的简单API
路径: Java XML处理API(JAXP)
课程: JAXP简介

XML API的简单API

SAX解析API的基本概述如图 1-1所示。要开始该过程,需要使用SAXParserFactory类的一个实例来生成解析器的实例。

图 1-1 SAX API

SAX APIs

解析器包装了一个SAXReader对象。当调用解析器的parse()方法时,读取器会调用应用程序中实现的多个回调方法。这些方法由ContentHandlerErrorHandlerDTDHandlerEntityResolver接口定义。

以下是关键SAX API的摘要:

SAXParserFactory

SAXParserFactory对象创建一个解析器的实例,该实例由系统属性javax.xml.parsers.SAXParserFactory确定。

SAXParser

SAXParser接口定义了几种parse()方法。通常,您将XML数据源和一个DefaultHandler对象传递给解析器,解析器处理XML并调用处理程序对象中的适当方法。

SAXReader

SAXParser包装了一个SAXReader。通常情况下,您不需要关心它,但偶尔需要使用SAXParsergetXMLReader()来获取它,以便您可以对其进行配置。它是SAXReader与您定义的SAX事件处理程序之间进行交流的组件。

DefaultHandler

在图表中未显示,DefaultHandler实现了ContentHandlerErrorHandlerDTDHandlerEntityResolver接口(带有空方法),因此您只能重写您感兴趣的方法。

ContentHandler

当识别到XML标签时,会调用startDocumentendDocumentstartElementendElement等方法。此接口还定义了characters()processingInstruction()方法,当解析器遇到XML元素或内联处理指令中的文本时,会调用这些方法。

ErrorHandler

在处理各种解析错误时,会调用error()fatalError()warning()方法。默认错误处理程序对致命错误抛出异常,忽略其他错误(包括验证错误)。这是您需要了解SAX解析器的原因之一,即使您正在使用DOM。有时,应用程序可能能够从验证错误中恢复。其他时候,可能需要生成异常。为确保正确处理,您需要为解析器提供自己的错误处理程序。

DTDHandler

定义了一些您通常不需要使用的方法。在处理DTD时,用于识别和处理未解析实体的声明。

EntityResolver

当解析器必须识别由URI标识的数据时,会调用resolveEntity方法。在大多数情况下,URI只是一个URL,指定文档的位置,但在某些情况下,文档可能由一个URN(唯一的公共标识符或名称)标识。公共标识符可以在URL之外指定。在这种情况下,EntityResolver可以使用公共标识符而不是URL来查找文档,例如,访问文档的本地副本(如果存在)。

一个典型的应用程序至少实现了大部分ContentHandler方法。因为接口的默认实现除了致命错误外都忽略所有的输入,所以一个健壮的实现也可以实现ErrorHandler方法。

SAX包

SAX解析器在下表中列出的包中定义。

表  SAX包

描述

org.xml.sax

定义SAX接口。名称org.xml是由定义SAX API的组确定的包前缀。

org.xml.sax.ext

定义用于执行更复杂的SAX处理的SAX扩展,例如处理文档类型定义(DTD)或查看文件的详细语法。

org.xml.sax.helpers

包含使使用SAX更容易的辅助类,例如通过定义一个默认处理程序,其中所有接口的方法都为空方法,因此您只需要重写您实际想要实现的方法。

javax.xml.parsers

定义SAXParserFactory类,它返回SAXParser。还定义了用于报告错误的异常类。


上一页: 包的概述
下一页: 文档对象模型API