# XML API 的简单 API > 原文: [https://docs.oracle.com/javase/tutorial/jaxp/intro/simple.html](https://docs.oracle.com/javase/tutorial/jaxp/intro/simple.html) SAX 解析 API 的基本概要如[图 1-1](#gcezl) 所示。要启动该过程, `SAXParserFactory` 类的实例用于生成解析器的实例。 图 1-1 SAX API ![The SAX APIs](img/a5c19e73860b8327ec4460afcd0fcdf5.jpg) 解析器包装 `SAXReader` 对象。当调用解析器的 `parse()`方法时,读者会调用应用程序中实现的几种回调方法之一。这些方法由接口 `ContentHandler` , `ErrorHandler` , `DTDHandler` 和 `EntityResolver` 定义。 以下是关键 SAX API 的小结: `SAXParserFactory` `SAXParserFactory` 对象创建由系统属性 `javax.xml.parsers.SAXParserFactory` 确定的解析器实例。 `SAXParser` `SAXParser` 接口定义了几种 `parse()`方法。通常,您将 XML 数据源和 `DefaultHandler` 对象传递给解析器,解析器处理 XML 并调用处理器对象中的相应方法。 `SAXReader` `SAXParser` 包装 `SAXReader` 。通常,你不关心这一点,但每隔一段时间你需要使用 `SAXParser` 的 `getXMLReader()`来掌握它,以便你可以配置它。 `SAXReader` 与您定义的 SAX 事件处理器进行对话。 `DefaultHandler` 未在图中显示, `DefaultHandler` 实现 `ContentHandler` , `ErrorHandler` , `DTDHandler` 和 `EntityResolver` 接口(使用 null 方法),因此您只能覆盖您感兴趣的那些。 `ContentHandler` 识别 XML 标记时,会调用 `startDocument` , `endDocument` , `startElement` 和 `endElement` 等方法。此接口还定义了方法 `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 解析器在以下[表](#gceyy)中列出的包中定义。 表 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` 。还定义了报告错误的异常类。 |