xml.sax.xmlreader
--- 用于 XML 解析器的接口?
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)解讀為 namespaceURI 和 localname 二元組。 此外,它還提供了一些期望接收在原始文檔中出現的限定名稱(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)。