xml.sax
— SAX2 解析器支援¶
xml.sax
包提供了一些模組,這些模組實現了 Python 的 XML 簡單 API (SAX) 介面。該包本身提供 SAX 異常和 SAX API 使用者最常用的便捷函式。
在 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,它必須是一個 SAXErrorHandler
例項;如果省略,則所有錯誤都將引發SAXParseException
。沒有返回值;所有工作都必須由傳入的 handler 完成。
- xml.sax.parseString(string, handler, error_handler=handler.ErrorHandler())¶
與
parse()
類似,但從作為引數接收的緩衝區 string 進行解析。string 必須是str
例項或 類位元組物件。在 3.5 版本中更改: 添加了對
str
例項的支援。
典型的 SAX 應用程式使用三種類型的物件:讀取器、處理器和輸入源。此處的“讀取器”是解析器的另一個術語,即從輸入源讀取位元組或字元並生成一系列事件的一些程式碼。然後,這些事件將被分發到處理器物件,即讀取器呼叫處理器上的方法。因此,SAX 應用程式必須獲取一個讀取器物件,建立或開啟輸入源,建立處理器,並將這些物件連線在一起。作為準備的最後一步,呼叫讀取器來解析輸入。在解析期間,會根據輸入資料的結構和語法事件呼叫處理器物件上的方法。
對於這些物件,只有介面是相關的;它們通常不是由應用程式本身例項化的。由於 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 應該是對錯誤的人工可讀描述。可選的 exception 引數(如果給定)應該是
None
或被解析程式碼捕獲並作為資訊傳遞的異常。這是其他 SAX 異常類的基類。
- exception xml.sax.SAXParseException(msg, exception, locator)¶
SAXException
的子類,在解析錯誤時引發。此類例項被傳遞到 SAXErrorHandler
介面的方法,以提供有關解析錯誤的資訊。此類支援 SAXLocator
介面以及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
。