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