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