xml.sax — SAX2 解析器支援

原始碼: Lib/xml/sax/__init__.py


xml.sax 包提供了一些模組,這些模組實現了 Python 的 XML 簡單 API (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。沒有返回值;所有工作都必須由傳入的 handler 完成。

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

parse() 類似,但從作為引數接收的緩衝區 string 進行解析。string 必須是 str 例項或 類位元組物件

在 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 介面。

異常 xml.sax.SAXNotRecognizedException(msg, exception=None)

當 SAX XMLReader 遇到無法識別的特性或屬性時,會引發此異常,它是 SAXException 的子類。 SAX 應用程式和擴充套件可以使用此類來達到類似的目的。

異常 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

解析器提供的物件的介面定義。

SAXException 物件

SAXException 異常類支援以下方法

SAXException.getMessage()

返回描述錯誤情況的人類可讀訊息。

SAXException.getException()

返回封裝的異常物件,或者 None