xml.sax
— 对 SAX2 解析器的支持¶
xml.sax
包提供了多个模块,它们为 Python 实现了 XML 简单 API (SAX) 接口。该包本身提供了 SAX 异常以及 SAX API 用户最常用的便利函数。
备注
如果您需要解析不受信任或未经身份验证的数据,请参阅 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,它必须是一个 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
接口。
- exception xml.sax.SAXNotRecognizedException(msg, exception=None)¶
SAXException
的子类,当 SAXXMLReader
遇到无法识别的特性或属性时引发。SAX 应用程序和扩展程序可以出于类似目的使用此类。
- exception xml.sax.SAXNotSupportedException(msg, exception=None)¶
SAXException
的子类,当 SAXXMLReader
被要求启用不支持的特性或将属性设置为实现不支持的值时引发。SAX 应用程序和扩展程序可以出于类似目的使用此类。
参见
- SAX: XML 的简单 API
此站点是 SAX API 定义的焦点。它提供 Java 实现和在线文档。还提供实现和历史信息的链接。
- 模块
xml.sax.handler
应用程序提供的对象接口的定义。
- 模块
xml.sax.saxutils
SAX 应用程序中使用的便利函数。
- 模块
xml.sax.xmlreader
解析器提供的对象接口的定义。
SAXException 对象¶
SAXException
异常类支持以下方法
- SAXException.getMessage()¶
返回描述错误条件的人类可读消息。
- SAXException.getException()¶
返回封装的异常对象,或
None
。