Skip to main content

20.9. xml.sax —支持SAX2解析器

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


xml.sax 包提供了许多实现Python的Simple API for XML(SAX)接口的模块。包本身提供SAX异常和SAX API的用户最常用的便利功能。

警告

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

方便的功能有:

xml.sax.make_parser(parser_list=[])

创建并返回SAX XMLReader 对象。将使用找到的第一个解析器。如果提供 parser_list,它必须是一个字符串序列,命名具有名为 create_parser() 的函数的模块。在 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 实例或 bytes-like object

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

典型的SAX应用程序使用三种对象:读取器,处理程序和输入源。在此上下文中的“读取器”是用于解析器的另一术语,即从输入源读取字节或字符并产生事件序列的一些代码段。然后,事件被分配给处理程序对象,即读取器调用处理程序上的方法。因此,SAX应用程序必须获取reader对象,创建或打开输入源,创建处理程序,并将这些对象连接在一起。作为准备的最后一步,读者被调用来解析输入。在解析期间,基于来自输入数据的结构和句法事件来调用处理程序对象上的方法。

对于这些对象,只有接口是相关的;它们通常不由应用程序本身实例化。由于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)

当SAX XMLReader 遇到无法识别的要素或属性时,会产生 SAXException 的子类。 SAX应用程序和扩展可以使用此类用于类似的目的。

exception 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

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

20.9.1. SAXException对象

SAXException 异常类支持以下方法:

SAXException.getMessage()

返回描述错误条件的人工可读消息。

SAXException.getException()

返回一个封装的异常对象或 None