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

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


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

class xml.sax.xmlreader.XMLReader?

可由 SAX 解析器繼承的基類。

class xml.sax.xmlreader.IncrementalParser?

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

當解析器被實例化時它已準備好立即開始接受來自 feed 方法的數據。 在通過調用 close 方法結束解析時 reset 方法也必須被調用以使解析器準備好接受新的數據,無論它是來自于 feed 還是使用 parse 方法。

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

默認情況下,該類還使用 IncrementalParser 接口的 feed, close 和 reset 方法來實現 XMLReader 接口的 parse 方法以方便 SAX 2.0 驅動的編寫者。

class xml.sax.xmlreader.Locator?

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

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

XMLReader 讀取實體所需信息的封裝。

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

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

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

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

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

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

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

XMLReader 對象?

XMLReader 接口支持下列方法:

XMLReader.parse(source)?

Process an input source, producing SAX events. The source object can be a system identifier (a string identifying the input source -- typically a file name or a URL), a file-like object, or an InputSource object. When parse() returns, the input is completely processed, and the parser object can be discarded or reset.

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

XMLReader.getContentHandler()?

返回當前的 ContentHandler

XMLReader.setContentHandler(handler)?

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

XMLReader.getDTDHandler()?

返回當前的 DTDHandler

XMLReader.setDTDHandler(handler)?

設置當前的 DTDHandler。 如果沒有設置 DTDHandler,DTD 事件將被德育。

XMLReader.getEntityResolver()?

返回當前的 EntityResolver

XMLReader.setEntityResolver(handler)?

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

XMLReader.getErrorHandler()?

返回當前的 ErrorHandler

XMLReader.setErrorHandler(handler)?

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

XMLReader.setLocale(locale)?

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

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

XMLReader.getFeature(featurename)?

返回 featurename 特性的當前設置。 如果特性無法被識別,則會引發 SAXNotRecognizedException。 在 xml.sax.handler 模塊中列出了常見的特性名稱。

XMLReader.setFeature(featurename, value)?

featurename 設為 value。 如果特性無法被識別,則會引發 SAXNotRecognizedException。 如果特性或其設置不被解析器所支持,則會引發 SAXNotSupportedException

XMLReader.getProperty(propertyname)?

返回 propertyname 屬性的當前設置。 如果屬性無法被識別,則會引發 SAXNotRecognizedException。 在 xml.sax.handler 模塊中列出了常見的屬性名稱。

XMLReader.setProperty(propertyname, value)?

propertyname 設為 value。 如果屬性無法被識別,則會引發 SAXNotRecognizedException。 如果屬性或其設置不被解析器所支持,則會引發 SAXNotSupportedException

IncrementalParser 對象?

IncrementalParser 的實例額外提供了下列方法:

IncrementalParser.feed(data)?

處理 data 的一個分塊。

IncrementalParser.close()?

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

IncrementalParser.reset()?

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

Locator 對象?

Locator 的實例提供了下列方法:

Locator.getColumnNumber()?

返回當前事件開始位置的列號。

Locator.getLineNumber()?

返回當前事件開始位置的行號。

Locator.getPublicId()?

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

Locator.getSystemId()?

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

InputSource 對象?

InputSource.setPublicId(id)?

設置該 InputSource 的公有標識符。

InputSource.getPublicId()?

返回此 InputSource 的公有標識符。

InputSource.setSystemId(id)?

設置此 InputSource 的系統標識符。

InputSource.getSystemId()?

返回此 InputSource 的系統標識符。

InputSource.setEncoding(encoding)?

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

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

如果 InputSource 還包含一個字符流則 InputSource 的 encoding 屬性會被忽略。

InputSource.getEncoding()?

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

InputSource.setByteStream(bytefile)?

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

如果還指定了一個字符流被則 SAX 解析器會忽略此設置,但它將優先使用字節流而不是自己打開一個 URI 連接。

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

InputSource.getByteStream()?

獲取此輸入源的字節流。

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

InputSource.setCharacterStream(charfile)?

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

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

InputSource.getCharacterStream()?

獲取此輸入源的字符流。

Attributes 接口?

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

Attributes.getLength()?

返回屬性的數量。

Attributes.getNames()?

返回屬性的名稱。

Attributes.getType(name)?

返回屬性 name 的類型,通常為 'CDATA'

Attributes.getValue(name)?

返回屬性 name 的值。

AttributesNS 接口?

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

下列方法也是可用的:

AttributesNS.getValueByQName(name)?

返回一個限定名稱的值。

AttributesNS.getNameByQName(name)?

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

AttributesNS.getQNameByName(name)?

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

AttributesNS.getQNames()?

返回所有屬性的限定名稱。