xml.sax
— 對 SAX2 解析器的支援¶
xml.sax
包提供了多個模組,它們為 Python 實現了 XML 簡單 API (SAX) 介面。該包本身提供了 SAX 異常以及 SAX API 使用者最常用的便利函式。
備註
如果您需要解析不受信任或未經身份驗證的資料,請參閱 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,它必須是一個 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
介面。
- exception xml.sax.SAXNotRecognizedException(msg, exception=None)¶
SAXException
的子類,當 SAXXMLReader
遇到無法識別的特性或屬性時引發。SAX 應用程式和擴充套件程式可以出於類似目的使用此類。
- exception xml.sax.SAXNotSupportedException(msg, exception=None)¶
SAXException
的子類,當 SAXXMLReader
被要求啟用不支援的特性或將屬性設定為實現不支援的值時引發。SAX 應用程式和擴充套件程式可以出於類似目的使用此類。
參見
- SAX: XML 的簡單 API
此站點是 SAX API 定義的焦點。它提供 Java 實現和線上文件。還提供實現和歷史資訊的連結。
- 模組
xml.sax.handler
應用程式提供的物件介面的定義。
- 模組
xml.sax.saxutils
SAX 應用程式中使用的便利函式。
- 模組
xml.sax.xmlreader
解析器提供的物件介面的定義。
SAXException 物件¶
SAXException
異常類支援以下方法
- SAXException.getMessage()¶
返回描述錯誤條件的人類可讀訊息。
- SAXException.getException()¶
返回封裝的異常物件,或
None
。