XML API 的简单 API
Figure 1-1中显示了 SAX 解析 API 的基本概述。首先,使用SAXParserFactory
类的实例来生成解析器的实例。
解析器包装SAXReader
对象。调用解析器的parse\(\)
方法时,读取器将调用应用程序中实现的几种回调方法之一。这些方法由interfaceContentHandler
,ErrorHandler
,DTDHandler
和EntityResolver
定义。
这是关键 SAX API 的摘要:
-
SAXParserFactory
SAXParserFactory
对象创建由系统属性javax\.xml\.parsers\.SAXParserFactory
确定的解析器的实例。
-
SAXParser
SAXParser
interface定义了几种parse\(\)
方法。通常,您将 XML 数据源和DefaultHandler
对象传递给解析器,该解析器处理 XML 并调用处理程序对象中的适当方法。
-
SAXReader
SAXParser
包装SAXReader
。通常,您不必担心,但是偶尔需要使用SAXParser
的getXMLReader\(\)
掌握它,以便进行配置。SAXReader
与您定义的 SAX 事件处理程序进行对话。
-
DefaultHandler
- 图中未显示,
DefaultHandler
实现ContentHandler
,ErrorHandler
,DTDHandler
和EntityResolver
interface(使用空方法),因此您只能覆盖您感兴趣的interface。
- 图中未显示,
-
ContentHandler
- 识别 XML 标签时,将调用诸如
startDocument
,endDocument
,startElement
和endElement
之类的方法。此interface还定义了方法characters\(\)
和processingInstruction\(\)
,当解析器遇到 XML 元素或内联处理指令中的文本时分别调用。
- 识别 XML 标签时,将调用诸如
-
ErrorHandler
- 响应各种解析错误,调用方法
error\(\)
,fatalError\(\)
和warning\(\)
。默认错误处理程序将引发致命错误的异常,并忽略其他错误(包括验证错误)。这是即使您正在使用 DOM,也需要了解有关 SAX 解析器的原因之一。有时,应用程序可能能够从验证错误中恢复。在其他时间,可能需要生成异常。为了确保正确处理,您将需要向解析器提供自己的错误处理程序。
- 响应各种解析错误,调用方法
-
DTDHandler
- 定义通常不会调用的方法。在处理 DTD 以识别未解析实体的声明并对其执行操作时使用。
-
EntityResolver
- 当解析器必须标识 URI 标识的数据时,将调用
resolveEntity
方法。在大多数情况下,URI 只是一个 URL,它指定了文档的位置,但是在某些情况下,文档可以由 URN 标识-URN 是 Web 空间中唯一的公共标识符或名称。除了 URL 之外,还可以指定公共标识符。然后EntityResolver
可以使用公共标识符而不是 URL 来查找文档,例如,访问存在文档的本地副本。
- 当解析器必须标识 URI 标识的数据时,将调用
典型的应用程序至少要实现大多数ContentHandler
方法。由于interface的默认实现会忽略致命错误以外的所有 Importing,因此可靠的实现可能还希望实现ErrorHandler
方法。
SAX Packages
SAX 解析器在以下Table列出的软件包中定义。
Packages | Description |
---|---|
org\.xml\.sax |
定义 SAX interface。名称org\.xml 是定义 SAX API 的组确定的软件包前缀。 |
org\.xml\.sax\.ext |
定义用于执行更复杂的 SAX 处理的 SAXextensions,例如,用于处理文档类型定义(DTD)或查看文件的详细语法。 |
org\.xml\.sax\.helpers |
包含一些帮助程序类,这些类使使用 SAX 更加容易,例如,通过定义一个默认处理程序,该处理程序对所有interface都具有 null 方法,从而使您仅需要覆盖实际要实现的interface即可。 |
javax\.xml\.parsers |
定义SAXParserFactory 类,该类返回SAXParser 。还定义了用于报告错误的异常类。 |