xml.sax —支持 SAX2 解析器

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


xml.sax软件包提供了许多模块,这些模块为 Python 实现了 XML 的简单 API(SAX)接口。程序包本身提供了 SAX 异常和便利Function,这些Function将由 SAX API 的用户最多使用。

Warning

xml.sax模块不能安全防范恶意构建的数据。如果您需要解析不可信或未经身份验证的数据,请参见XML vulnerabilities

在版本 3.7.1 中进行了更改:默认情况下,SAX 解析器不再处理常规外部实体以提高安全性。以前,解析器创建网络连接以从 DTD 和实体的文件系统中获取远程文件或加载本地文件。可以使用解析器对象上的方法setFeature()和参数feature_external_ges再次启用该Function。

便利Function为:

  • 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实例;如果Ellipsis,将在所有错误上引发SAXParseException。没有返回值;所有工作必须由传入的 handler *完成。
  • xml.sax. parseString(* string handler error_handler = handler.ErrorHandler()*)

    • parse()相似,但从作为参数接收的缓冲区* string *中进行解析。 * string *必须是str实例或bytes-like object

在版本 3.5 中进行了更改:添加了对str个实例的支持。

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

对于这些对象,仅接口是相关的。它们通常不由应用程序本身实例化。由于 Python 没有明确的接口概念,因此将它们作为类正式引入,但是应用程序可以使用不从提供的类继承的实现。 InputSourceLocatorAttributesAttributesNSXMLReader接口在模块xml.sax.xmlreader中定义。处理程序接口在xml.sax.handler中定义。为了方便起见,InputSource(通常直接实例化)和处理程序类也可以从xml.sax获得。这些接口说明如下。

除了这些类之外,xml.sax还提供以下异常类。

    • exception * xml.sax. SAXException(* msg exception = None *)
    • 封装 XML 错误或警告。此类可以包含来自 XML 解析器或应用程序的基本错误或警告信息:可以将其子类化以提供其他Function或添加本地化。请注意,尽管在ErrorHandler接口中定义的处理程序接收到此异常的实例,但实际上并不需要引发该异常-它也可用作信息的容器。

实例化时,* msg 应该是该错误的易于理解的描述。可选的 exception *参数(如果提供)应为None或解析代码捕获并作为信息传递的异常。

这是其他 SAX 异常类的 Base Class。

    • exception * xml.sax. SAXParseException(* msg exception locator *)
    • exception * xml.sax. SAXNotRecognizedException(* msg exception = None *)
    • 当 SAX XMLReader遇到无法识别的Function或属性时,将引发SAXException的子类。 SAX 应用程序和扩展可以出于类似的目的使用此类。
    • exception * xml.sax. SAXNotSupportedException(* msg exception = None *)
    • 当要求 SAX XMLReader启用不支持的Function或将属性设置为实现不支持的值时,引发SAXException的子类。 SAX 应用程序和扩展可以出于类似的目的使用此类。

See also

  • SAX:XML 的简单 API

  • 该站点是 SAX API 定义的焦点。它提供了 Java 实现和在线文档。也提供实现和历史信息的链接。

  • Module xml.sax.handler

  • 应用程序提供的对象的接口的定义。

  • Module xml.sax.saxutils

  • 在 SAX 应用程序中使用的便利Function。

  • Module xml.sax.xmlreader

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

SAXException Objects

SAXException异常类支持以下方法:

  • SAXException. getMessage ( )

    • 返回描述错误情况的可读消息。
  • SAXException. getException ( )

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