xml.sax — 支持 SAX2 解析器 — Python 文档

来自菜鸟教程
Python/docs/3.10/library/xml.sax
跳转至:导航、​搜索

xml.sax — 支持 SAX2 解析器

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



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

警告

xml.sax 模块对于恶意构造的数据并不安全。 如果您需要解析不受信任或未经身份验证的数据,请参阅 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,它必须是一个 SAX ErrorHandler 实例; 如果省略,所有错误都会引发 SAXParseException。 没有返回值; 所有工作都必须由传入的 处理程序 完成。
xml.sax.parseString(string, handler, error_handler=handler.ErrorHandler())

类似于 parse(),但从作为参数接收的缓冲区 string 解析。 string 必须是一个 str 实例或一个 bytes-like object

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

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

对于这些对象,只有接口是相关的; 它们通常不会被应用程序本身实例化。 由于 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)
SAXException 的子类在 SAX XMLReader 遇到无法识别的功能或属性时引发。 SAX 应用程序和扩展可以将此类用于类似目的。
exception xml.sax.SAXNotSupportedException(msg, exception=None)
SAXException 的子类在要求 SAX XMLReader 启用不受支持的功能或将属性设置为实现不支持的值时引发。 SAX 应用程序和扩展可以将此类用于类似目的。

也可以看看

SAX:XML 的简单 API
该站点是 SAX API 定义的焦点。 它提供了 Java 实现和在线文档。 还提供了实现和历史信息的链接。
模块 xml.sax.handler
应用程序提供对象的接口定义。
模块 xml.sax.saxutils
在 SAX 应用程序中使用的便利功能。
模块 xml.sax.xmlreader
解析器提供的对象的接口定义。


SAXException 对象

SAXException 异常类支持以下方法:

SAXException.getMessage()
返回描述错误情况的人类可读消息。
SAXException.getException()
返回一个封装的异常对象,或 None