xml.sax
--- 支持 SAX2 解析器?
xml.sax
包提供多個模塊,它們在 Python 上實現(xiàn)了用于 XML (SAX) 接口的簡單 API。 這個包本身為 SAX API 用戶提供了一些最常用的 SAX 異常和便捷函數(shù)。
在 3.7.1 版更改: SAX 解析器默認不會再處理通用外部實體以便提升安全性。 在此之前,解析器會創(chuàng)建網(wǎng)絡(luò)連接來獲取遠程文件或是從 DTD 和實體文件系統(tǒng)中加載本地文件。 此特性可通過在解析器對象上調(diào)用 setFeature()
對象并傳入?yún)?shù) feature_external_ges
來重新啟用。
可用的便捷函數(shù)如下所列:
- xml.sax.make_parser(parser_list=[])?
創(chuàng)建并返回一個 SAX
XMLReader
對象。 將返回第一個被找到的解析器。 如果提供了 parser_list,它必須為一個包含字符串的可迭代對象,這些字符串指定了具有名為create_parser()
函數(shù)的模塊。 在 parser_list 中列出的模塊將在默認解析器列表中的模塊之前被使用。在 3.8 版更改: parser_list 參數(shù)可以是任意可迭代對象,而不一定是列表。
- xml.sax.parse(filename_or_stream, handler, error_handler=handler.ErrorHandler())?
創(chuàng)建一個 SAX 解析器并用它來解析文檔。 用于傳入文檔的 filename_or_stream 可以是一個文件名或文件對象。 handler 形參必須是一個 SAX
ContentHandler
實例。 如果給出了 error_handler,則它必須是一個 SAXErrorHandler
實例;如果省略,則對于任何錯誤都將引發(fā)SAXParseException
。 此函數(shù)沒有返回值;所有操作必須由傳入的 handler 來完成。
- xml.sax.parseString(string, handler, error_handler=handler.ErrorHandler())?
類似于
parse()
,但解析對象是作為形參傳入的緩沖區(qū) string。 string 必須為str
實例或者 bytes-like object。在 3.5 版更改: 增加了對
str
實例的支持。
典型的 SAX 應(yīng)用程序會使用三種對象:讀取器、處理句柄和輸入源。 “讀取器”在此上下文中與解析器同義,即某個從輸入源讀取字節(jié)或字符,并產(chǎn)生事件序列的代碼段。 事件隨后將被分發(fā)給處理句柄對象,即由讀取器發(fā)起調(diào)用處理句柄上的某個方法。 因此 SAX 應(yīng)用程序必須獲取一個讀取器對象,創(chuàng)建或打開輸入源,創(chuàng)建處理句柄,并一起連接到這些對象。 作為準備工作的最后一步,將調(diào)用讀取器來解析輸入內(nèi)容。 在解析過程中,會根據(jù)來自輸入數(shù)據(jù)的結(jié)構(gòu)化和語義化事件來調(diào)用處理句柄對象上的方法。
就這些對象而言,只有接口部分是需要關(guān)注的;它們通常不是由應(yīng)用程序本身來實例化。 由于 Python 沒有顯式的接口標記法,它們的正式引入形式是類,但應(yīng)用程序可能會使用并非從已提供的類繼承而來的實現(xiàn)。 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 解析器或應(yīng)用程序的基本錯誤或警告信息:它可以被子類化以提供額外的功能或是添加本地化信息。 請注意雖然在
ErrorHandler
接口中定義的處理句柄可以接收該異常的實例,但是并不要求實際引發(fā)該異常 --- 它也可以被用作信息的容器。當(dāng)實例化時,msg 應(yīng)當(dāng)是適合人類閱讀的錯誤描述。 如果給出了可選的 exception 形參,它應(yīng)當(dāng)為
None
或者解析代碼所捕獲的異常并會被作為信息傳遞出去。這是其他 SAX 異常類的基類。
- exception xml.sax.SAXParseException(msg, exception, locator)?
SAXException
的子類,針對解析錯誤引發(fā)。 這個類的實例會被傳遞給 SAXErrorHandler
接口的方法來提供關(guān)于解析錯誤的信息。 這個類支持 SAXLocator
接口以及SAXException
接口。
- exception xml.sax.SAXNotRecognizedException(msg, exception=None)?
SAXException
的子類,當(dāng) SAXXMLReader
遇到不可識別的特性或?qū)傩詴r引發(fā)。 SAX 應(yīng)用程序和擴展可能會出于類似目的而使用這個類。
- exception xml.sax.SAXNotSupportedException(msg, exception=None)?
SAXException
的子類,當(dāng) SAXXMLReader
被要求啟用某個不受支持的特性,或者將某個屬性設(shè)為具體實現(xiàn)不支持的值時引發(fā)。 SAX 應(yīng)用程序和擴展可能會出于類似目的而使用這個類。
參見
- SAX: The Simple API for XML
這個網(wǎng)站是 SAX API 定義的焦點。 它提供了一個 Java 實現(xiàn)以及在線文檔。 還包括其他實現(xiàn)的鏈接和歷史信息。
xml.sax.handler
模塊應(yīng)用程序所提供對象的接口定義。
xml.sax.saxutils
模塊可在 SAX 應(yīng)用程序中使用的便捷函數(shù)。
xml.sax.xmlreader
模塊解析器所提供對象的接口定義。
SAXException 對象?
SAXException
異常類支持下列方法:
- SAXException.getMessage()?
返回描述錯誤條件的適合人類閱讀的消息。
- SAXException.getException()?
返回一個封裝的異常對象或者
None
。