XML API 的简单 API

原文: https://docs.oracle.com/javase/tutorial/jaxp/intro/simple.html

SAX 解析 API 的基本概要如图 1-1 所示。要启动该过程, SAXParserFactory类的实例用于生成解析器的实例。

图 1-1 SAX API

The 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接口(使用 null 方法),因此您只能覆盖您感兴趣的那些。

ContentHandler

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

ErrorHandler

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

DTDHandler

定义通常永远不会被调用的方法。在处理 DTD 以识别和处理未解析实体的声明时使用。

EntityResolver

当解析器必须标识由 URI 标识的数据时,将调用resolveEntity方法。在大多数情况下,URI 只是一个 URL,它指定文档的位置,但在某些情况下,文档可能由 URN 标识 - 一个公共标识符或名称,在 Web 空间中是唯一的。除了 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 的辅助类 - 例如,通过定义一个对所有接口都有 null 方法的默认处理器,这样您只需要覆盖实际想要实现的那些。 | | javax.xml.parsers | 定义SAXParserFactory类,它返回SAXParser 。还定义了报告错误的异常类。 |