xml.sax — SAX2 解析器支持

源代码: Lib/xml/sax/__init__.py


xml.sax 包提供了一些模块,这些模块实现了 Python 的 XML 简单 API (SAX) 接口。该包本身提供 SAX 异常和 SAX API 用户最常用的便捷函数。

警告

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

在 3.7.1 版本中更改: 为了提高安全性,SAX 解析器默认不再处理常规外部实体。之前,解析器会创建网络连接来获取远程文件,或者从文件系统中加载 DTD 和实体的本地文件。可以使用解析器对象上的 setFeature() 方法和参数 feature_external_ges 重新启用此功能。

便捷函数包括:

xml.sax.make_parser(parser_list=[])

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

在 3.8 版本中更改: parser_list 参数可以是任何可迭代对象,而不仅仅是列表。

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

创建一个 SAX 解析器并使用它来解析文档。作为 filename_or_stream 传入的文档可以是文件名或文件对象。handler 参数需要是一个 SAX ContentHandler 实例。如果给定了 error_handler,它必须是一个 SAX ErrorHandler 实例;如果省略,则所有错误都将引发 SAXParseException。没有返回值;所有工作都必须由传入的 handler 完成。

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

parse() 类似,但从作为参数接收的缓冲区 string 进行解析。string 必须是 str 实例或 类字节对象

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

典型的 SAX 应用程序使用三种类型的对象:读取器、处理器和输入源。此处的“读取器”是解析器的另一个术语,即从输入源读取字节或字符并生成一系列事件的一些代码。然后,这些事件将被分发到处理器对象,即读取器调用处理器上的方法。因此,SAX 应用程序必须获取一个读取器对象,创建或打开输入源,创建处理器,并将这些对象连接在一起。作为准备的最后一步,调用读取器来解析输入。在解析期间,会根据输入数据的结构和语法事件调用处理器对象上的方法。

对于这些对象,只有接口是相关的;它们通常不是由应用程序本身实例化的。由于 Python 没有明确的接口概念,因此它们被正式引入为类,但应用程序可以使用不继承自所提供类的实现。InputSourceLocatorAttributesAttributesNSXMLReader 接口在模块 xml.sax.xmlreader 中定义。处理器接口在 xml.sax.handler 中定义。为方便起见,InputSource(通常直接实例化)和处理器类也可以从 xml.sax 获得。这些接口如下所述。

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

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

封装 XML 错误或警告。此类可以包含来自 XML 解析器或应用程序的基本错误或警告信息:可以对其进行子类化以提供其他功能或添加本地化。请注意,尽管在 ErrorHandler 接口中定义的处理器接收此异常的实例,但不需要实际引发异常 —— 它也可以用作信息容器。

实例化时,msg 应该是对错误的人工可读描述。可选的 exception 参数(如果给定)应该是 None 或被解析代码捕获并作为信息传递的异常。

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

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

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

异常 xml.sax.SAXNotRecognizedException(msg, exception=None)

当 SAX XMLReader 遇到无法识别的特性或属性时,会引发此异常,它是 SAXException 的子类。 SAX 应用程序和扩展可以使用此类来达到类似的目的。

异常 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

解析器提供的对象的接口定义。

SAXException 对象

SAXException 异常类支持以下方法

SAXException.getMessage()

返回描述错误情况的人类可读消息。

SAXException.getException()

返回封装的异常对象,或者 None