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

源代码: Lib / xml / sax / __ init __。py

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

警告

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

方便的功能有:

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传入的文档可以是文件名或文件对象。处理程序参数需要是SAX ContentHandler实例。如果给出error_handler,它必须是SAX ErrorHandler实例;如果省略,将对所有错误引发SAXParseException没有返回值;所有工作必须由传递的处理程序完成。

xml.sax.parseString(string, handler, error_handler=handler.ErrorHandler())

类似于parse(),但是从作为参数接收的缓冲区字符串解析。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应该是人为可读的错误描述。可选的异常参数(如果给出)应为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 Objects

SAXException异常类支持以下方法:

SAXException.getMessage()

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

SAXException.getException()

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