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 接口。

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

SAXException 的子类,当 SAX XMLReader 遇到无法识别的功能或属性时引发。SAX 应用程序和扩展可以使用此类来实现类似的目的。

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

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

另请参阅

SAX:XML 的简单 API

本网站是 SAX API 定义的中心。它提供了一个 Java 实现和在线文档。还可以链接到实现和历史信息。

模块 xml.sax.handler

应用程序提供的对象的接口定义。

模块 xml.sax.saxutils

用于 SAX 应用程序的便捷函数。

模块 xml.sax.xmlreader

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

SAXException 对象

SAXException 异常类支持以下方法

SAXException.getMessage()

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

SAXException.getException()

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