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