# 20.9. `xml.sax` - 支持SAX2解析器

源代码： Lib / xml / sax / __ init __。py

`xml.sax`包提供了许多实现Python的Simple API for XML（SAX）接口的模块。软件包本身提供SAX异常和SAX API的用户最常用的方便功能。

警告

`xml.sax`模块对于恶意构造的数据不安全。如果需要解析不受信任或未经身份验证的数据，请参阅XML vulnerabilities。

方便的功能有：

`xml.sax.``make_parser`(parser_list=[])

  创建并返回SAX `XMLReader`对象。将使用找到的第一个解析器。如果提供了parser_list，它必须是一串字符串，它命名具有名为`create_parser()`的函数的模块。在parser_list中列出的模块将在默认的解析器列表中的模块之前使用。

`xml.sax.``parse`(filename_or_stream, handler, error_handler=handler.ErrorHandler())

  创建一个SAX解析器并使用它来解析文档。作为filename_or_stream传入的文档可以是文件名或文件对象。处理程序参数需要是SAX `ContentHandler`实例。如果给出error_handler，它必须是SAX `ErrorHandler`实例；如果省略，将对所有错误引发`SAXParseException`。没有返回值；所有工作必须由传递的处理程序完成。

`xml.sax.``parseString`(string, handler, error_handler=handler.ErrorHandler())

  类似于`parse()`，但是从作为参数接收的缓冲区字符串解析。string必须是`str`实例或bytes-like object。

  在版本3.5中已更改：添加了对`str`实例的支持。

典型的SAX应用程序使用三种对象：读取器，处理程序和输入源。在本文中，“读者”是解析器的另一个术语，即从输入源读取字节或字符的一些代码，并且产生事件序列。然后事件被分配给处理程序对象，即读取器调用处理程序上的方法。因此，SAX应用程序必须获取reader对象，创建或打开输入源，创建处理程序，并将这些对象连接在一起。作为准备的最后一步，读者被调用来解析输入。在解析期间，基于来自输入数据的结构和句法事件来调用处理程序对象上的方法。

对于这些对象，只有接口是相关的；它们通常不会由应用程序本身实例化。由于Python没有明确的接口概念，它们被正式引入为类，但应用程序可能使用不从提供的类继承的实现。定义`InputSource`，`Locator`，`Attributes`，`AttributesNS`和`XMLReader`模块`xml.sax.xmlreader`。处理程序接口在`xml.sax.handler`中定义。为方便起见，`InputSource`（通常直接实例化）和处理程序类也可从`xml.sax`获得。这些接口如下所述。

除了这些类之外，`xml.sax`还提供以下异常类。

exception `xml.sax.``SAXException`(msg, exception=None)

  封装XML错误或警告。此类可以包含来自XML解析器或应用程序的基本错误或警告信息：可以将其子类化以提供其他功能或添加本地化。请注意，虽然`ErrorHandler`接口中定义的处理程序接收到此异常的实例，但不需要实际引发异常 - 它也可用作信息的容器。

  实例化时，msg应该是人为可读的错误描述。可选的异常参数（如果给出）应为`None`或者由解析代码捕获并作为信息传递的异常。

  这是其他SAX异常类的基类。

exception `xml.sax.``SAXParseException`(msg, exception, locator)

  在解析错误时引发的`SAXException`子类。将此类的实例传递给SAX `ErrorHandler`接口的方法，以提供有关解析错误的信息。此类支持SAX `Locator`接口以及`SAXException`接口。

exception `xml.sax.``SAXNotRecognizedException`(msg, exception=None)

  当SAX `XMLReader`遇到无法识别的要素或属性时引发的`SAXException`子类。SAX应用程序和扩展可以使用此类用于类似的目的。

exception `xml.sax.``SAXNotSupportedException`(msg, exception=None)

  当要求SAX `XMLReader`启用不支持的功能时，或者将属性设置为实现不支持的值时，引发`SAXException`的子类。SAX应用程序和扩展可以使用此类用于类似的目的。

也可以看看

SAX：XML的简单API
  这个网站是SAX API定义的焦点。它提供了一个Java实现和在线文档。也提供实现和历史信息的链接。
模块`xml.sax.handler`
  应用程序提供对象的接口定义。
模块`xml.sax.saxutils`
  用于SAX应用程序的便利功能。
模块`xml.sax.xmlreader`
  解析器提供的对象的接口定义。

## 20.9.1. SAXException Objects

`SAXException`异常类支持以下方法：

`SAXException.``getMessage`()

  返回描述错误条件的人工可读消息。

`SAXException.``getException`()

  返回封装的异常对象，或`None`。