xml.sax
— SAX2 解析器支持¶
xml.sax
包提供了一些模块,这些模块实现了 Python 的 XML 简单 API (SAX) 接口。该包本身提供 SAX 异常和 SAX API 用户最常用的便捷函数。
在 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,它必须是一个 SAXErrorHandler
实例;如果省略,则所有错误都将引发SAXParseException
。没有返回值;所有工作都必须由传入的 handler 完成。
- xml.sax.parseString(string, handler, error_handler=handler.ErrorHandler())¶
与
parse()
类似,但从作为参数接收的缓冲区 string 进行解析。string 必须是str
实例或 类字节对象。在 3.5 版本中更改: 添加了对
str
实例的支持。
典型的 SAX 应用程序使用三种类型的对象:读取器、处理器和输入源。此处的“读取器”是解析器的另一个术语,即从输入源读取字节或字符并生成一系列事件的一些代码。然后,这些事件将被分发到处理器对象,即读取器调用处理器上的方法。因此,SAX 应用程序必须获取一个读取器对象,创建或打开输入源,创建处理器,并将这些对象连接在一起。作为准备的最后一步,调用读取器来解析输入。在解析期间,会根据输入数据的结构和语法事件调用处理器对象上的方法。
对于这些对象,只有接口是相关的;它们通常不是由应用程序本身实例化的。由于 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 应该是对错误的人工可读描述。可选的 exception 参数(如果给定)应该是
None
或被解析代码捕获并作为信息传递的异常。这是其他 SAX 异常类的基类。
- exception xml.sax.SAXParseException(msg, exception, locator)¶
SAXException
的子类,在解析错误时引发。此类实例被传递到 SAXErrorHandler
接口的方法,以提供有关解析错误的信息。此类支持 SAXLocator
接口以及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
。