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