xml.sax.xmlreader --- 用于 XML 解析器的接口?

源代碼: Lib/xml/sax/xmlreader.py


SAX 解析器實(shí)現了 XMLReader 接口。 它們是在一個(gè) Python 模塊中實(shí)現的,該模塊必須提供一個(gè) create_parser() 函數。 該函數由 xml.sax.make_parser() 不帶參數地發(fā)起調用來(lái)創(chuàng )建新的解析器對象。

class xml.sax.xmlreader.XMLReader?

可由 SAX 解析器繼承的基類(lèi)。

class xml.sax.xmlreader.IncrementalParser?

在某些情況下,最好不要一次性地解析輸入源,而是在可用的時(shí)候分塊送入。 請注意讀取器通常不會(huì )讀取整個(gè)文件,它同樣也是分塊讀取的; 并且 parse() 在處理完整個(gè)文檔之前不會(huì )返回。 所以如果不希望 parse() 出現阻塞行為則應當使用這些接口。

當解析器被實(shí)例化時(shí)它已準備好立即開(kāi)始接受來(lái)自 feed 方法的數據。 在通過(guò)調用 close 方法結束解析時(shí) reset 方法也必須被調用以使解析器準備好接受新的數據,無(wú)論它是來(lái)自于 feed 還是使用 parse 方法。

請注意這些方法 不可 在解析期間被調用,即在 parse 被調用之后及其返回之前。

默認情況下,該類(lèi)還使用 IncrementalParser 接口的 feed, close 和 reset 方法來(lái)實(shí)現 XMLReader 接口的 parse 方法以方便 SAX 2.0 驅動(dòng)的編寫(xiě)者。

class xml.sax.xmlreader.Locator?

用于關(guān)聯(lián)一個(gè) SAX 事件與一個(gè)文檔位置的接口。 定位器對象只有在調用 DocumentHandler 的方法期間才會(huì )返回有效的結果;在其他任何時(shí)候,結果都是不可預測的。 如果信息不可用,這些方法可能返回 None。

class xml.sax.xmlreader.InputSource(system_id=None)?

XMLReader 讀取實(shí)體所需信息的封裝。

這個(gè)類(lèi)可能包括了關(guān)于公有標識符、系統標識符、字節流(可能帶有字符編碼格式信息)和/或一個(gè)實(shí)體的字符流的信息。

應用程序將創(chuàng )建這個(gè)類(lèi)的對象以便在 XMLReader.parse() 方法中使用或是用于從 EntityResolver.resolveEntity 返回值。

InputSource 屬于應用程序,XMLReader 不能修改從應用程序傳遞給它的 InputSource 對象,但它可以創(chuàng )建副本并進(jìn)行修改。

class xml.sax.xmlreader.AttributesImpl(attrs)?

這是 Attributes 接口(參見(jiàn) Attributes 接口 一節)的具體實(shí)現。 這是一個(gè) startElement() 調用中的元素屬性的字典類(lèi)對象。 除了最有用處的字典操作,它還支持接口所描述的一些其他方法。 該類(lèi)的對象應當由讀取器來(lái)實(shí)例化;attrs 必須為包含從屬性名到屬性值的映射的字典類(lèi)對象。

class xml.sax.xmlreader.AttributesNSImpl(attrs, qnames)?

可感知命名空間的 AttributesImpl 變體形式,它將被傳遞給 startElementNS()。 它派生自 AttributesImpl,但會(huì )將屬性名稱(chēng)解讀為 namespaceURIlocalname 二元組。 此外,它還提供了一些期望接收在原始文檔中出現的限定名稱(chēng)的方法。 這個(gè)類(lèi)實(shí)現了 AttributesNS 接口(參見(jiàn) AttributesNS 接口 一節)。

XMLReader 對象?

XMLReader 接口支持下列方法:

XMLReader.parse(source)?

處理輸入源,產(chǎn)生 SAX 事件。 source 對象可以是一個(gè)系統標識符(標識輸入源的字符串 -- 通常為文件名或 URL), pathlib.Path路徑類(lèi) 對象,或者是 InputSource 對象。 當 parse() 返回時(shí),輸入會(huì )被全部處理完成,解析器對象可以被丟棄或重置。

在 3.5 版更改: 添加了對字符流的支持。

在 3.8 版更改: 增加了對路徑類(lèi)對象的支持。

XMLReader.getContentHandler()?

返回當前的 ContentHandler。

XMLReader.setContentHandler(handler)?

設置當前的 ContentHandler。 如果沒(méi)有設置 ContentHandler,內容事件將被丟棄。

XMLReader.getDTDHandler()?

返回當前的 DTDHandler。

XMLReader.setDTDHandler(handler)?

設置當前的 DTDHandler。 如果沒(méi)有設置 DTDHandler,DTD 事件將被丟棄。

XMLReader.getEntityResolver()?

返回當前的 EntityResolver。

XMLReader.setEntityResolver(handler)?

設置當前的 EntityResolver。 如果沒(méi)有設置 EntityResolver,嘗試解析一個(gè)外部實(shí)體將導致打開(kāi)該實(shí)體的系統標識符,并且如果它不可用則操作將失敗。

XMLReader.getErrorHandler()?

返回當前的 ErrorHandler。

XMLReader.setErrorHandler(handler)?

設置當前的錯誤處理句柄。 如果沒(méi)有設置 ErrorHandler,錯誤將作為異常被引發(fā),并將打印警告信息。

XMLReader.setLocale(locale)?

允許應用程序為錯誤和警告設置語(yǔ)言區域。

SAX 解析器不要求為錯誤和警告提供本地化信息;但是如果它們無(wú)法支持所請求的語(yǔ)言區域,則必須引發(fā)一個(gè) SAX 異常。 應用程序可以在解析的中途請求更改語(yǔ)言區域。

XMLReader.getFeature(featurename)?

返回 featurename 特性的當前設置。 如果特性無(wú)法被識別,則會(huì )引發(fā) SAXNotRecognizedException。 在 xml.sax.handler 模塊中列出了常見(jiàn)的特性名稱(chēng)。

XMLReader.setFeature(featurename, value)?

featurename 設為 value。 如果特性無(wú)法被識別,則會(huì )引發(fā) SAXNotRecognizedException。 如果特性或其設置不被解析器所支持,則會(huì )引發(fā) SAXNotSupportedException。

XMLReader.getProperty(propertyname)?

返回 propertyname 屬性的當前設置。 如果屬性無(wú)法被識別,則會(huì )引發(fā) SAXNotRecognizedException。 在 xml.sax.handler 模塊中列出了常見(jiàn)的屬性名稱(chēng)。

XMLReader.setProperty(propertyname, value)?

propertyname 設為 value。 如果屬性無(wú)法被識別,則會(huì )引發(fā) SAXNotRecognizedException。 如果屬性或其設置不被解析器所支持,則會(huì )引發(fā) SAXNotSupportedException。

IncrementalParser 對象?

IncrementalParser 的實(shí)例額外提供了下列方法:

IncrementalParser.feed(data)?

處理 data 的一個(gè)分塊。

IncrementalParser.close()?

確定文檔的結尾。 這將檢查只能在結尾處檢查的格式是否良好的條件,發(fā)起調用處理程序,并可能會(huì )清理在解析期間分配的資源。

IncrementalParser.reset()?

此方法會(huì )在調用 close 來(lái)重置解析器以便其準備好解析新的文檔之后被調用。 在 close 之后未調用 reset 即調用 parse 或 feed 的結果是未定義的。

Locator 對象?

Locator 的實(shí)例提供了下列方法:

Locator.getColumnNumber()?

返回當前事件開(kāi)始位置的列號。

Locator.getLineNumber()?

返回當前事件開(kāi)始位置的行號。

Locator.getPublicId()?

返回當前事件的公有標識符。

Locator.getSystemId()?

返回當前事件的系統標識符。

InputSource 對象?

InputSource.setPublicId(id)?

設置該 InputSource 的公有標識符。

InputSource.getPublicId()?

返回此 InputSource 的公有標識符。

InputSource.setSystemId(id)?

設置此 InputSource 的系統標識符。

InputSource.getSystemId()?

返回此 InputSource 的系統標識符。

InputSource.setEncoding(encoding)?

設置此 InputSource 的字符編碼格式。

編碼格式必須是 XML 編碼聲明可接受的字符串(參見(jiàn) XML 建議規范第 4.3.3 節)。

如果 InputSource 還包含一個(gè)字符流則 InputSource 的 encoding 屬性會(huì )被忽略。

InputSource.getEncoding()?

獲取此 InputSource 的字符編碼格式。

InputSource.setByteStream(bytefile)?

設置此輸入源的字節流(為 binary file 對象)。

如果還指定了一個(gè)字符流被則 SAX 解析器會(huì )忽略此設置,但它將優(yōu)先使用字節流而不是自己打開(kāi)一個(gè) URI 連接。

如果應用程序知道字節流的字符編碼格式,它應當使用 setEncoding 方法來(lái)設置它。

InputSource.getByteStream()?

獲取此輸入源的字節流。

getEncoding 方法將返回該字節流的字符編碼格式,如果未知則返回 None。

InputSource.setCharacterStream(charfile)?

設置此輸入源的字符流 (為 text file 對象)。

如果指定了一個(gè)字符流,SAX 解析器將忽略任何字節流并且不會(huì )嘗試打開(kāi)一個(gè)指向系統標識符的 URI 連接。

InputSource.getCharacterStream()?

獲取此輸入源的字符流。

Attributes 接口?

Attributes 對象實(shí)現了一部分 映射協(xié)議,包括 copy(), get(), __contains__(), items(), keys()values() 等方法。 還提供了下列方法:

Attributes.getLength()?

返回屬性的數量。

Attributes.getNames()?

返回屬性的名稱(chēng)。

Attributes.getType(name)?

返回屬性 name 的類(lèi)型,通常為 'CDATA'。

Attributes.getValue(name)?

返回屬性 name 的值。

AttributesNS 接口?

此接口是 Attributes 接口(參見(jiàn) Attributes 接口 章節)的一個(gè)子類(lèi)型。 那個(gè)接口所支持的所有方法在 AttributesNS 對象上也都可用。

下列方法也是可用的:

AttributesNS.getValueByQName(name)?

返回一個(gè)限定名稱(chēng)的值。

AttributesNS.getNameByQName(name)?

返回限定名稱(chēng) name(namespace, localname) 對。

AttributesNS.getQNameByName(name)?

返回 (namespace, localname) 對的限定名稱(chēng)。

AttributesNS.getQNames()?

返回所有屬性的限定名稱(chēng)。