xml.sax.xmlreader --- 用于 XML 解析器的接口?
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,但會將屬性名稱解讀為 namespaceURI 和 localname 二元組。 此外,它還提供了一些期望接收在原始文檔中出現的限定名稱的方法。 這個類實現了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
InputSourceobject. Whenparse()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()? 返回所有屬性的限定名稱。
