xml.parsers.expat --- 使用 Expat 的快速 XML 解析?
警告
pyexpat 模塊對于惡意構(gòu)建的數(shù)據(jù)是不安全的。 如果你需要解析不受信任或未經(jīng)身份驗(yàn)證的數(shù)據(jù),請參閱 XML 漏洞。
xml.parsers.expat 模塊是針對 Expat 非驗(yàn)證 XML 解析器的 Python 接口。 此模塊提供了一個(gè)擴(kuò)展類型 xmlparser,它代表一個(gè) XML 解析器的當(dāng)前狀態(tài)。 在創(chuàng)建一個(gè) xmlparser 對象之后,該對象的各個(gè)屬性可被設(shè)置為相應(yīng)的處理句柄函數(shù)。 隨后當(dāng)將一個(gè) XML 文檔送入解析器時(shí),就會(huì)為該 XML 文檔中的字符數(shù)據(jù)和標(biāo)記調(diào)用處理句柄函數(shù)。
此模塊使用 pyexpat 模塊來提供對 Expat 解析器的訪問。 直接使用 pyexpat 模塊的方式已被棄用。
此模塊提供了一個(gè)異常和一個(gè)類型對象:
- exception xml.parsers.expat.ExpatError?
此異常會(huì)在 Expat 報(bào)錯(cuò)時(shí)被引發(fā)。 請參閱 ExpatError 異常 一節(jié)了解有關(guān)解讀 Expat 錯(cuò)誤的更多信息。
- exception xml.parsers.expat.error?
ExpatError的別名。
- xml.parsers.expat.XMLParserType?
來自
ParserCreate()函數(shù)的返回值的類型。
xml.parsers.expat 模塊包含兩個(gè)函數(shù):
- xml.parsers.expat.ErrorString(errno)?
返回給定錯(cuò)誤號 errno 的解釋性字符串。
- xml.parsers.expat.ParserCreate(encoding=None, namespace_separator=None)?
創(chuàng)建并返回一個(gè)新的
xmlparser對象。 如果指定了 encoding,它必須為指定 XML 數(shù)據(jù)所使用的編碼格式名稱的字符串。 Expat 支持的編碼格式?jīng)]有 Python 那樣多,而且它的編碼格式庫也不能被擴(kuò)展;它支持 UTF-8, UTF-16, ISO-8859-1 (Latin1) 和 ASCII。 如果給出了 encoding 1 則它將覆蓋隱式或顯式指定的文檔編碼格式。可以選擇讓 Expat 為你做 XML 命名空間處理,這是通過提供 namespace_separator 值來啟用的。 該值必須是一個(gè)單字符的字符串;如果字符串的長度不合法則將引發(fā)
ValueError(None被視為等同于省略)。 當(dāng)命名空間處理被啟用時(shí),屬于特定命名空間的元素類型名稱和屬性名稱將被展開。 傳遞給The element name passed to the 元素處理句柄StartElementHandler和EndElementHandler的元素名稱將為命名空間 URI,命名空間分隔符和名稱的本地部分的拼接。 如果命名空間分隔符是一個(gè)零字節(jié) (chr(0)) 則命名空間 URI 和本地部分將被直接拼接而不帶任何分隔符。舉例來說,如果 namespace_separator 被設(shè)為空格符 (
' ') 并對以下文檔進(jìn)行解析:<?xml version="1.0"?> <root xmlns = "http://default-namespace.org/" xmlns:py = "http://www.python.org/ns/"> <py:elem1 /> <elem2 xmlns="" /> </root>
StartElementHandler將為每個(gè)元素獲取以下字符串:http://default-namespace.org/ root http://www.python.org/ns/ elem1 elem2
由于
pyexpat所使用的Expat庫的限制,被返回的xmlparser實(shí)例只能被用來解析單個(gè) XML 文檔。 請為每個(gè)文檔調(diào)用ParserCreate來提供單獨(dú)的解析器實(shí)例。
參見
- The Expat XML Parser
Expat 項(xiàng)目的主頁。
XMLParser對象?
xmlparser 對象具有以下方法:
- xmlparser.Parse(data[, isfinal])?
解析字符串 data 的內(nèi)容,調(diào)用適當(dāng)?shù)奶幚砗瘮?shù)來處理解析后的數(shù)據(jù)。 在對此方法的最后一次調(diào)用時(shí) isfinal 必須為真值;它允許以片段形式解析單個(gè)文件,而不是提交多個(gè)文件。 data 在任何時(shí)候都可以為空字符串。
- xmlparser.ParseFile(file)?
解析從對象 file 讀取的 XML 數(shù)據(jù)。 file 僅需提供
read(nbytes)方法,當(dāng)沒有更多數(shù)據(jù)可讀時(shí)將返回空字符串。
- xmlparser.SetBase(base)?
設(shè)置要用于解析聲明中的系統(tǒng)標(biāo)識符的相對 URI 的基準(zhǔn)。 解析相對標(biāo)識符的任務(wù)會(huì)留給應(yīng)用程序進(jìn)行:這個(gè)值將作為 base 參數(shù)傳遞給
ExternalEntityRefHandler(),NotationDeclHandler()和UnparsedEntityDeclHandler()函數(shù)。
- xmlparser.GetBase()?
返回包含之前調(diào)用
SetBase()所設(shè)置的基準(zhǔn)位置的字符串,或者如果未調(diào)用SetBase()則返回None。
- xmlparser.GetInputContext()?
將生成當(dāng)前事件的輸入數(shù)據(jù)以字符串形式返回。 數(shù)據(jù)為包含文本的實(shí)體的編碼格式。 如果被調(diào)用時(shí)未激活事件處理句柄,則返回值將為
None。
- xmlparser.ExternalEntityParserCreate(context[, encoding])?
創(chuàng)建一個(gè)“子”解析器,可被用來解析由父解析器解析的內(nèi)容所引用的外部解析實(shí)體。 context 形參應(yīng)當(dāng)是傳遞給
ExternalEntityRefHandler()處理函數(shù)的字符串,具體如下所述。 子解析器創(chuàng)建時(shí)ordered_attributes和specified_attributes會(huì)被設(shè)為此解析器的值。
- xmlparser.SetParamEntityParsing(flag)?
控制參數(shù)實(shí)體(包括外部 DTD 子集)的解析。 可能的 flag 值有
XML_PARAM_ENTITY_PARSING_NEVER,XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE和XML_PARAM_ENTITY_PARSING_ALWAYS。 如果該旗標(biāo)設(shè)置成功則返回真值。
- xmlparser.UseForeignDTD([flag])?
調(diào)用時(shí)將 flag 設(shè)為真值(默認(rèn))將導(dǎo)致 Expat 調(diào)用
ExternalEntityRefHandler時(shí)將所有參數(shù)設(shè)為None以允許加載替代的 DTD。 如果文檔不包含文檔類型聲明,ExternalEntityRefHandler仍然會(huì)被調(diào)用,但StartDoctypeDeclHandler和EndDoctypeDeclHandler將不會(huì)被調(diào)用。為 flag 傳入假值將將撤消之前傳入真值的調(diào)用,除此之外沒有其他影響。
此方法只能在調(diào)用
Parse()或ParseFile()方法之前被調(diào)用;在已調(diào)用過這兩個(gè)方法之后調(diào)用它會(huì)導(dǎo)致引發(fā)ExpatError且code屬性被設(shè)為errors.codes[errors.XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING]。
xmlparser 對象具有下列屬性:
- xmlparser.buffer_size?
當(dāng)
buffer_text為真值時(shí)所使用的緩沖區(qū)大小。 可以通過將此屬性賦一個(gè)新的整數(shù)值來設(shè)置一個(gè)新的緩沖區(qū)大小。 當(dāng)大小發(fā)生改變時(shí),緩沖區(qū)將被刷新。
- xmlparser.buffer_text?
將此屬性設(shè)為真值會(huì)使得
xmlparser對象緩沖 Expat 所返回的文本內(nèi)容以盡可能地避免多次調(diào)用CharacterDataHandler()回調(diào)。 這可以顯著地提升性能,因?yàn)?Expat 通常會(huì)將字符數(shù)據(jù)在每個(gè)行結(jié)束的位置上進(jìn)行分塊。 此屬性默認(rèn)為假值,但可以在任何時(shí)候被更改。
- xmlparser.buffer_used?
當(dāng)
buffer_text被啟用時(shí),緩沖區(qū)中存儲(chǔ)的字節(jié)數(shù)。 這些字節(jié)數(shù)據(jù)表示以 UTF-8 編碼的文本。 當(dāng)buffer_text為假值時(shí)此屬性沒有任何實(shí)際意義。
- xmlparser.ordered_attributes?
將該屬性設(shè)為非零整數(shù)會(huì)使得各個(gè)屬性被報(bào)告為列表而非字典。 各個(gè)屬性會(huì)按照在文檔文本中的出現(xiàn)順序顯示。 對于每個(gè)屬性,將顯示兩個(gè)列表?xiàng)l目:屬性名和屬性值。 (該模塊的較舊版本也使用了此格式。) 默認(rèn)情況下,該屬性為假值;它可以在任何時(shí)候被更改。
- xmlparser.specified_attributes?
如果設(shè)為非零整數(shù),解析器將只報(bào)告在文檔實(shí)例中指明的屬性而不報(bào)告來自屬性聲明的屬性。 設(shè)置此屬性的應(yīng)用程序需要特別小心地使用從聲明中獲得的附加信息以符合 XML 處理程序的行為標(biāo)準(zhǔn)。 默認(rèn)情況下,該屬性為假值;它可以在任何時(shí)候被更改。
下列屬性包含與 xmlparser 對象遇到的最近發(fā)生的錯(cuò)誤有關(guān)聯(lián)的值,并且一旦對 Parse() 或 ParseFile() 的調(diào)用引發(fā)了 xml.parsers.expat.ExpatError 異常就將只包含正確的值。
- xmlparser.ErrorByteIndex?
錯(cuò)誤發(fā)生位置的字節(jié)索引號。
- xmlparser.ErrorCode?
指明問題的的數(shù)字代碼。 該值可被傳給
ErrorString()函數(shù),或是與在errors對象中定義的常量之一進(jìn)行比較。
- xmlparser.ErrorColumnNumber?
錯(cuò)誤發(fā)生位置的列號。
- xmlparser.ErrorLineNumber?
錯(cuò)誤發(fā)生位置的行號。
下列屬性包含 xmlparser 對象中關(guān)聯(lián)到當(dāng)前解析位置的值。 在回調(diào)報(bào)告解析事件期間它們將指示生成事件的字符序列的第一個(gè)字符的位置。 當(dāng)在回調(diào)的外部被調(diào)用時(shí),所指示的位置將恰好位于最后的解析事件之后(無論是否存在關(guān)聯(lián)的回調(diào))。
- xmlparser.CurrentByteIndex?
解析器輸入的當(dāng)前字節(jié)索引號。
- xmlparser.CurrentColumnNumber?
解析器輸入的當(dāng)前列號。
- xmlparser.CurrentLineNumber?
解析器輸入的當(dāng)前行號。
可被設(shè)置的處理句柄列表。 要在一個(gè) xmlparser 對象 o 上設(shè)置處理句柄,請使用 o.handlername = func。 handlername 必須從下面的列表中獲取,而 func 必須為接受正確數(shù)量參數(shù)的可調(diào)用對象。 所有參數(shù)均為字符串,除非另外指明。
- xmlparser.XmlDeclHandler(version, encoding, standalone)?
當(dāng)解析 XML 聲明時(shí)被調(diào)用。 XML 聲明是 XML 建議適用版本、文檔文本的編碼格式,以及可選的“獨(dú)立”聲明的(可選)聲明。 version 和 encoding 將為字符串,而 standalone 在文檔被聲明為獨(dú)立時(shí)將為
1,在文檔被聲明為非獨(dú)立時(shí)將為0,或者在 standalone 短語被省略時(shí)則為-1。 這僅適用于 Expat 的 1.95.0 或更新版本。
- xmlparser.StartDoctypeDeclHandler(doctypeName, systemId, publicId, has_internal_subset)?
當(dāng) Expat 開始解析文檔類型聲明 (
<!DOCTYPE ...) 時(shí)被調(diào)用。 doctypeName 會(huì)完全按所顯示的被提供。 systemId 和 publicId 形參給出所指定的系統(tǒng)和公有標(biāo)識符,如果被省略則為None。 如果文檔包含內(nèi)部文檔聲明子集則 has_internal_subset 將為真值。 這要求 Expat 1.2 或更新的版本。
- xmlparser.EndDoctypeDeclHandler()?
當(dāng) Expat 完成解析文檔類型聲明時(shí)被調(diào)用。 這要求 Expat 1.2 或更新版本。
- xmlparser.ElementDeclHandler(name, model)?
為每個(gè)元素類型聲明調(diào)用一次。 name 為元素類型名稱,而 model 為內(nèi)容模型的表示形式。
- xmlparser.AttlistDeclHandler(elname, attname, type, default, required)?
為一個(gè)元素類型的每個(gè)已聲明屬性執(zhí)行調(diào)用。 如果一個(gè)屬性列表聲明聲明了三個(gè)屬性,這個(gè)處理句柄會(huì)被調(diào)用三次,每個(gè)屬性一次。 elname 是聲明所適用的元素的名稱而 attname 是已聲明的屬性的名稱。 屬性類型是作為 type 傳入的字符串;可能的值有
'CDATA','ID','IDREF', ... default 給出了當(dāng)屬性未被文檔實(shí)例所指明時(shí)該屬性的默認(rèn)值,或是為None,如果沒有默認(rèn)值 (#IMPLIED值) 的話。 如果屬性必須在文檔實(shí)例中給出,則 required 將為真值。 這要求 Expat 1.95.0 或更新的版本。
- xmlparser.StartElementHandler(name, attributes)?
在每個(gè)元素開始時(shí)調(diào)用。 name 是包含元素名稱的字符串,而 attributes 是元素的屬性。 如果
ordered_attributes為真值,則屬性為列表形式 (完整描述參見ordered_attributes)。 否則為將名稱映射到值的字典。
- xmlparser.EndElementHandler(name)?
在每個(gè)元素結(jié)束時(shí)調(diào)用。
- xmlparser.ProcessingInstructionHandler(target, data)?
在每次處理指令時(shí)調(diào)用。
- xmlparser.CharacterDataHandler(data)?
針對字符數(shù)據(jù)調(diào)用。 此方法將被用于普通字符數(shù)據(jù)、CDATA 標(biāo)記內(nèi)容以及可忽略的空白符。 需要區(qū)分這幾種情況的應(yīng)用程序可以使用
StartCdataSectionHandler,EndCdataSectionHandler和ElementDeclHandler回調(diào)來收集必要的信息。
- xmlparser.UnparsedEntityDeclHandler(entityName, base, systemId, publicId, notationName)?
針對未解析(NDATA)實(shí)體聲明調(diào)用。 此方法僅存在于 Expat 庫的 1. 2 版;對于更新的版本,請改用
EntityDeclHandler。 (下層 Expat 庫中的對應(yīng)函數(shù)已被聲明為過時(shí)。)
- xmlparser.EntityDeclHandler(entityName, is_parameter_entity, value, base, systemId, publicId, notationName)?
針對所有實(shí)體聲明被調(diào)用。 對于形參和內(nèi)部實(shí)體,value 將為給出實(shí)體的聲明內(nèi)容的字符串;對于外部實(shí)體將為
None。 notationName 形參對于已解析實(shí)體將為None,對于未解析實(shí)體則為標(biāo)注的名稱。 如果實(shí)體為形參實(shí)體則 is_parameter_entity 將為真值而如果為普通實(shí)體則為假值(大多數(shù)應(yīng)用程序只需要關(guān)注普通實(shí)體)。 此方法僅從 1.95.0 版 Expat 庫開始才可用。
- xmlparser.NotationDeclHandler(notationName, base, systemId, publicId)?
針對標(biāo)注聲明被調(diào)用。 notationName, base, systemId 和 publicId 如果給出則均應(yīng)為字符串。 如果省略公有標(biāo)識符,則 publicId 將為
None。
- xmlparser.StartNamespaceDeclHandler(prefix, uri)?
當(dāng)一個(gè)元素包含命名空間聲明時(shí)被調(diào)用。 命名空間聲明會(huì)在為聲明所在的元素調(diào)用
StartElementHandler之前被處理。
- xmlparser.EndNamespaceDeclHandler(prefix)?
當(dāng)?shù)竭_(dá)包含命名空間聲明的元素的關(guān)閉標(biāo)記時(shí)被調(diào)用。 此方法會(huì)按照調(diào)用
StartNamespaceDeclHandler以指明每個(gè)命名空間作用域的開始的逆順序?yàn)樵厣系拿總€(gè)命名空間聲明調(diào)用一次。 對這個(gè)處理句柄的調(diào)用是在相應(yīng)的EndElementHandler之后針對元素的結(jié)束而進(jìn)行的。
- xmlparser.CommentHandler(data)?
針對注釋被調(diào)用。 data 是注釋的文本,不包括開頭的
'<!--'和末尾的'-->'。
- xmlparser.StartCdataSectionHandler()?
在一個(gè) CDATA 節(jié)的開頭被調(diào)用。 需要此方法和
EndCdataSectionHandler以便能夠標(biāo)識 CDATA 節(jié)的語法開始和結(jié)束。
- xmlparser.EndCdataSectionHandler()?
在一個(gè) CDATA 節(jié)的末尾被調(diào)用。
- xmlparser.DefaultHandler(data)?
針對 XML 文檔中沒有指定適用處理句柄的任何字符被調(diào)用。 這包括了所有屬于可被報(bào)告的結(jié)構(gòu)的一部分,但未提供處理句柄的字符。
- xmlparser.DefaultHandlerExpand(data)?
這與
DefaultHandler()相同,但不會(huì)抑制內(nèi)部實(shí)體的擴(kuò)展。 實(shí)體引用將不會(huì)被傳遞給默認(rèn)處理句柄。
- xmlparser.NotStandaloneHandler()?
當(dāng) XML 文檔未被聲明為獨(dú)立文檔時(shí)被調(diào)用。 這種情況發(fā)生在出現(xiàn)外部子集或?qū)?shù)實(shí)體的引用,但 XML 聲明沒有在 XML 聲明中將 standalone 設(shè)為
yes的時(shí)候。 如果這個(gè)處理句柄返回0,那么解析器將引發(fā)XML_ERROR_NOT_STANDALONE錯(cuò)誤。 如果這個(gè)處理句柄沒有被設(shè)置,那么解析器就不會(huì)為這個(gè)條件引發(fā)任何異常。
- xmlparser.ExternalEntityRefHandler(context, base, systemId, publicId)?
為對外部實(shí)體的引用執(zhí)行調(diào)用。 base 為當(dāng)前的基準(zhǔn),由之前對
SetBase()的調(diào)用設(shè)置。 公有和系統(tǒng)標(biāo)識符 systemId 和 publicId 如果給出則圴為字符串;如果公有標(biāo)識符未給出,則 publicId 將為None。 context 是僅根據(jù)以下說明來使用的不透明值。對于要解析的外部實(shí)體,這個(gè)處理句柄必須被實(shí)現(xiàn)。 它負(fù)責(zé)使用
ExternalEntityParserCreate(context)來創(chuàng)建子解析器,通過適當(dāng)?shù)幕卣{(diào)將其初始化,并對實(shí)體進(jìn)行解析。 這個(gè)處理句柄應(yīng)當(dāng)返回一個(gè)整數(shù);如果它返回0,則解析器將引發(fā)XML_ERROR_EXTERNAL_ENTITY_HANDLING錯(cuò)誤,否則解析將會(huì)繼續(xù)。如果未提供這個(gè)處理句柄,外部實(shí)體會(huì)由
DefaultHandler回調(diào)來報(bào)告,如果提供了該回調(diào)的話。
ExpatError 異常?
ExpatError 異常包含幾個(gè)有趣的屬性:
- ExpatError.code?
Expat 對于指定錯(cuò)誤的內(nèi)部錯(cuò)誤號。
errors.messages字典會(huì)將這些錯(cuò)誤號映射到 Expat 的錯(cuò)誤消息。 例如:from xml.parsers.expat import ParserCreate, ExpatError, errors p = ParserCreate() try: p.Parse(some_xml_document) except ExpatError as err: print("Error:", errors.messages[err.code])
errors模塊也提供了一些錯(cuò)誤消息常量和一個(gè)將這些消息映射回錯(cuò)誤碼的字典codes,參見下文。
- ExpatError.lineno?
檢測到錯(cuò)誤所在的行號。 首行的行號為
1。
- ExpatError.offset?
錯(cuò)誤發(fā)生在行中的字符偏移量。 首列的列號為
0。
示例?
以下程序定義了三個(gè)處理句柄,會(huì)簡單地打印出它們的參數(shù)。:
import xml.parsers.expat
# 3 handler functions
def start_element(name, attrs):
print('Start element:', name, attrs)
def end_element(name):
print('End element:', name)
def char_data(data):
print('Character data:', repr(data))
p = xml.parsers.expat.ParserCreate()
p.StartElementHandler = start_element
p.EndElementHandler = end_element
p.CharacterDataHandler = char_data
p.Parse("""<?xml version="1.0"?>
<parent id="top"><child1 name="paul">Text goes here</child1>
<child2 name="fred">More text</child2>
</parent>""", 1)
來自這個(gè)程序的輸出是:
Start element: parent {'id': 'top'}
Start element: child1 {'name': 'paul'}
Character data: 'Text goes here'
End element: child1
Character data: '\n'
Start element: child2 {'name': 'fred'}
Character data: 'More text'
End element: child2
Character data: '\n'
End element: parent
內(nèi)容模型描述?
內(nèi)容模型是使用嵌套的元組來描述的。 每個(gè)元素包含四個(gè)值:類型、限定符、名稱和一個(gè)子元組。 子元組就是附加的內(nèi)容模型描述。
前兩個(gè)字段的值是在 xml.parsers.expat.model 模塊中定義的常量。 這些常量可分為兩組:模型類型組和限定符組。
模型類型組中的常量有:
- xml.parsers.expat.model.XML_CTYPE_ANY
模型名稱所指定的元素被聲明為具有
ANY內(nèi)容模型。
- xml.parsers.expat.model.XML_CTYPE_CHOICE
命名元素允許從幾個(gè)選項(xiàng)中選擇;這被用于
(A | B | C)形式的內(nèi)容模型。
- xml.parsers.expat.model.XML_CTYPE_EMPTY
被聲明為
EMPTY的元素具有此模型類型。
- xml.parsers.expat.model.XML_CTYPE_MIXED
- xml.parsers.expat.model.XML_CTYPE_NAME
- xml.parsers.expat.model.XML_CTYPE_SEQ
代表彼此相連的一系列模型的模型用此模型類型來指明。 這被用于
(A, B, C)形式的模型。
限定符組中的常量有:
- xml.parsers.expat.model.XML_CQUANT_NONE
未給出限定符,這樣它可以只出現(xiàn)一次,例如
A。
- xml.parsers.expat.model.XML_CQUANT_OPT
模型是可選的:它可以出現(xiàn)一次或完全不出現(xiàn),例如
A?。
- xml.parsers.expat.model.XML_CQUANT_PLUS
模型必須出現(xiàn)一次或多次 (例如
A+)。
- xml.parsers.expat.model.XML_CQUANT_REP
模型必須出現(xiàn)零次或多次,例如
A*。
Expat 錯(cuò)誤常量?
下列常量是在 xml.parsers.expat.errors 模塊中提供的。 這些常量在有錯(cuò)誤發(fā)生時(shí)解讀被引發(fā)的 ExpatError 異常對象的某些屬性時(shí)很有用處。 出于保持向下兼容性的理由,這些常量的值是錯(cuò)誤 消息 而不是數(shù)字形式的錯(cuò)誤 代碼,為此你可以將它的 code 屬性和 errors.codes[errors.XML_ERROR_CONSTANT_NAME] 進(jìn)行比較。
errors 模塊具有以下屬性:
- xml.parsers.expat.errors.codes?
將字符串描述映射到其錯(cuò)誤代碼的字典。
3.2 新版功能.
- xml.parsers.expat.errors.messages?
將數(shù)字形式的錯(cuò)誤代碼映射到其字符串描述的字典。
3.2 新版功能.
- xml.parsers.expat.errors.XML_ERROR_ASYNC_ENTITY?
- xml.parsers.expat.errors.XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF?
屬性值中指向一個(gè)外部實(shí)體而非內(nèi)部實(shí)體的實(shí)體引用。
- xml.parsers.expat.errors.XML_ERROR_BAD_CHAR_REF?
指向一個(gè)在 XML 不合法的字符的字符引用 (例如,字符
0或 '�')。
- xml.parsers.expat.errors.XML_ERROR_BINARY_ENTITY_REF?
指向一個(gè)使用標(biāo)注聲明,因而無法被解析的實(shí)體的實(shí)體引用。
- xml.parsers.expat.errors.XML_ERROR_DUPLICATE_ATTRIBUTE?
一個(gè)屬性在一個(gè)開始標(biāo)記中被使用超過一次。
- xml.parsers.expat.errors.XML_ERROR_INCORRECT_ENCODING?
- xml.parsers.expat.errors.XML_ERROR_INVALID_TOKEN?
當(dāng)一個(gè)輸入字節(jié)無法被正確分配給一個(gè)字符時(shí)引發(fā);例如,在 UTF-8 輸入流中的 NUL 字節(jié) (值為
0)。
- xml.parsers.expat.errors.XML_ERROR_JUNK_AFTER_DOC_ELEMENT?
在文檔元素之后出現(xiàn)空白符以外的內(nèi)容。
- xml.parsers.expat.errors.XML_ERROR_MISPLACED_XML_PI?
在輸入數(shù)據(jù)開始位置以外的地方發(fā)現(xiàn) XML 聲明。
- xml.parsers.expat.errors.XML_ERROR_NO_ELEMENTS?
文檔不包含任何元素(XML 要求所有文檔都包含恰好一個(gè)最高層級元素)。
- xml.parsers.expat.errors.XML_ERROR_NO_MEMORY?
Expat 無法在內(nèi)部分配內(nèi)存。
- xml.parsers.expat.errors.XML_ERROR_PARAM_ENTITY_REF?
在不被允許的位置發(fā)現(xiàn)一個(gè)參數(shù)實(shí)體引用。
- xml.parsers.expat.errors.XML_ERROR_PARTIAL_CHAR?
在輸入中發(fā)出一個(gè)不完整的字符。
- xml.parsers.expat.errors.XML_ERROR_RECURSIVE_ENTITY_REF?
一個(gè)實(shí)體引用包含了對同一實(shí)體的另一個(gè)引用;可能是通過不同的名稱,并可能是間接的引用。
- xml.parsers.expat.errors.XML_ERROR_SYNTAX?
遇到了某個(gè)未指明的語法錯(cuò)誤。
- xml.parsers.expat.errors.XML_ERROR_TAG_MISMATCH?
一個(gè)結(jié)束標(biāo)記不能匹配到最內(nèi)層的未關(guān)閉開始標(biāo)記。
- xml.parsers.expat.errors.XML_ERROR_UNCLOSED_TOKEN?
某些記號(例如開始標(biāo)記)在流結(jié)束或遇到下一個(gè)記號之前還未關(guān)閉。
- xml.parsers.expat.errors.XML_ERROR_UNDEFINED_ENTITY?
對一個(gè)未定義的實(shí)體進(jìn)行了引用。
- xml.parsers.expat.errors.XML_ERROR_UNKNOWN_ENCODING?
文檔編碼格式不被 Expat 所支持。
- xml.parsers.expat.errors.XML_ERROR_UNCLOSED_CDATA_SECTION?
一個(gè) CDATA 標(biāo)記節(jié)還未關(guān)閉。
- xml.parsers.expat.errors.XML_ERROR_EXTERNAL_ENTITY_HANDLING?
- xml.parsers.expat.errors.XML_ERROR_NOT_STANDALONE?
解析器確定文檔不是“獨(dú)立的”但它卻在 XML 聲明中聲明自己是獨(dú)立的,并且
NotStandaloneHandler被設(shè)置為返回0。
- xml.parsers.expat.errors.XML_ERROR_UNEXPECTED_STATE?
- xml.parsers.expat.errors.XML_ERROR_ENTITY_DECLARED_IN_PE?
- xml.parsers.expat.errors.XML_ERROR_FEATURE_REQUIRES_XML_DTD?
請求了一個(gè)需要已編譯 DTD 支持的操作,但 Expat 被配置為不帶 DTD 支持。 此錯(cuò)誤應(yīng)當(dāng)絕對不會(huì)被
xml.parsers.expat模塊的標(biāo)準(zhǔn)構(gòu)建版本所報(bào)告。
- xml.parsers.expat.errors.XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING?
在解析開始之后請求一個(gè)只能在解析開始之前執(zhí)行的行為改變。 此錯(cuò)誤(目前)只能由
UseForeignDTD()所引發(fā)。
- xml.parsers.expat.errors.XML_ERROR_UNBOUND_PREFIX?
當(dāng)命名空間處理被啟用時(shí)發(fā)現(xiàn)一個(gè)未聲明的前綴。
- xml.parsers.expat.errors.XML_ERROR_UNDECLARING_PREFIX?
文檔試圖移除與某個(gè)前綴相關(guān)聯(lián)的命名空間聲明。
- xml.parsers.expat.errors.XML_ERROR_INCOMPLETE_PE?
一個(gè)參數(shù)實(shí)體包含不完整的標(biāo)記。
- xml.parsers.expat.errors.XML_ERROR_XML_DECL?
文檔完全未包含任何文檔元素。
- xml.parsers.expat.errors.XML_ERROR_TEXT_DECL?
解析一個(gè)外部實(shí)體中的文本聲明時(shí)出現(xiàn)錯(cuò)誤。
- xml.parsers.expat.errors.XML_ERROR_PUBLICID?
在公有 id 中發(fā)現(xiàn)不被允許的字符。
- xml.parsers.expat.errors.XML_ERROR_SUSPENDED?
在掛起的解析器上請求執(zhí)行操作,但未獲得允許。 這包括提供額外輸入或停止解析器的嘗試。
- xml.parsers.expat.errors.XML_ERROR_NOT_SUSPENDED?
在解析器未被掛起的時(shí)候執(zhí)行恢復(fù)解析器的嘗試。
- xml.parsers.expat.errors.XML_ERROR_ABORTED?
此錯(cuò)誤不應(yīng)當(dāng)被報(bào)告給 Python 應(yīng)用程序。
- xml.parsers.expat.errors.XML_ERROR_FINISHED?
在一個(gè)已經(jīng)完成解析輸入的解析器上請求執(zhí)行操作,但未獲得允許。 這包括提供額外輸入或停止解析器的嘗試。
- xml.parsers.expat.errors.XML_ERROR_SUSPEND_PE?
- xml.parsers.expat.errors.XML_ERROR_RESERVED_PREFIX_XML?
An attempt was made to undeclare reserved namespace prefix
xmlor to bind it to another namespace URI.
- xml.parsers.expat.errors.XML_ERROR_RESERVED_PREFIX_XMLNS?
An attempt was made to declare or undeclare reserved namespace prefix
xmlns.
- xml.parsers.expat.errors.XML_ERROR_RESERVED_NAMESPACE_URI?
An attempt was made to bind the URI of one the reserved namespace prefixes
xmlandxmlnsto another namespace prefix.
- xml.parsers.expat.errors.XML_ERROR_INVALID_ARGUMENT?
此錯(cuò)誤不應(yīng)當(dāng)被報(bào)告給 Python 應(yīng)用程序。
- xml.parsers.expat.errors.XML_ERROR_NO_BUFFER?
此錯(cuò)誤不應(yīng)當(dāng)被報(bào)告給 Python 應(yīng)用程序。
- xml.parsers.expat.errors.XML_ERROR_AMPLIFICATION_LIMIT_BREACH?
The limit on input amplification factor (from DTD and entities) has been breached.
備注
- 1
包括在 XML 輸出中的編碼格式字符串應(yīng)當(dāng)符合適當(dāng)?shù)臉?biāo)準(zhǔn)。 例如 "UTF-8" 是有效的,但 "UTF8" 是無效的。 請參閱 https://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl 和 https://www.iana.org/assignments/character-sets/character-sets.xhtml。