xml.parsers.expat
— 使用 Expat 進行快速 XML 解析¶
警告
pyexpat
模組對於惡意構造的資料不安全。 如果您需要解析不受信任或未經身份驗證的資料,請參閱XML 漏洞。
xml.parsers.expat
模組是 Python 中 Expat 非驗證 XML 解析器的介面。 該模組提供了一個擴充套件型別 xmlparser
,它表示 XML 解析器的當前狀態。建立 xmlparser
物件後,可以將該物件的各種屬性設定為處理函式。然後,當將 XML 文件提供給解析器時,將為 XML 文件中的字元資料和標記呼叫處理函式。
此模組使用 pyexpat
模組來提供對 Expat 解析器的訪問。不推薦直接使用 pyexpat
模組。
此模組提供一個異常和一個型別物件
- exception xml.parsers.expat.ExpatError¶
當 Expat 報告錯誤時引發的異常。 有關解釋 Expat 錯誤的更多資訊,請參閱 ExpatError 異常 部分。
- exception xml.parsers.expat.error¶
的別名
ExpatError
。
- xml.parsers.expat.XMLParserType¶
的返回值型別
ParserCreate()
函式。
xml.parsers.expat
模組包含兩個函式
- xml.parsers.expat.ErrorString(errno)¶
返回給定錯誤號 *errno* 的解釋性字串。
- xml.parsers.expat.ParserCreate(encoding=None, namespace_separator=None)¶
建立並返回一個新的
xmlparser
物件。 *encoding*(如果指定)必須是一個字串,用於命名 XML 資料使用的編碼。 Expat 不支援 Python 支援的那麼多編碼,並且其編碼庫無法擴充套件;它支援 UTF-8、UTF-16、ISO-8859-1 (Latin1) 和 ASCII。 如果指定了 *encoding* [1],它將覆蓋文件的隱式或顯式編碼。Expat 可以選擇為您執行 XML 名稱空間處理,方法是為 *namespace_separator* 提供一個值。 該值必須是單字元字串;如果字串的長度不合法,將引發
ValueError
(None
被視為省略)。 啟用名稱空間處理後,將擴充套件屬於名稱空間的元素型別名稱和屬性名稱。 傳遞給元素處理程式StartElementHandler
和EndElementHandler
的元素名稱將是名稱空間 URI、名稱空間分隔符字元和名稱的本地部分的串聯。如果名稱空間分隔符是零位元組 (chr(0)
),則名稱空間 URI 和本地部分將串聯在一起,而沒有任何分隔符。例如,如果 *namespace_separator* 設定為空格字元 (
' '
) 並且解析了以下文件<?xml version="1.0"?> <root xmlns = "http://default-namespace.org/" xmlns:py = "https://python.club.tw/ns/"> <py:elem1 /> <elem2 xmlns="" /> </root>
StartElementHandler
將接收每個元素的以下字串http://default-namespace.org/ root http://www.python.org/ns/ elem1 elem2
由於
pyexpat
使用的Expat
庫的限制,返回的xmlparser
例項只能用於解析單個 XML 文件。 為每個文件呼叫ParserCreate
以提供唯一的解析器例項。
另請參閱
- Expat XML 解析器
Expat 專案的主頁。
XMLParser 物件¶
xmlparser
物件具有以下方法
- xmlparser.Parse(data[, isfinal])¶
解析字串 *data* 的內容,呼叫適當的處理函式來處理已解析的資料。 *isfinal* 必須在最後一次呼叫此方法時為 true;它允許以片段形式解析單個檔案,而不是提交多個檔案。 *data* 可以隨時為空字串。
- xmlparser.ParseFile(file)¶
解析從物件 *file* 讀取的 XML 資料。 *file* 只需要提供
read(nbytes)
方法,當沒有更多資料時返回空字串。
- xmlparser.SetBase(base)¶
設定基礎,用於解析宣告中系統識別符號中的相對 URI。 解析相對識別符號留給應用程式:此值將作為 *base* 引數傳遞給
ExternalEntityRefHandler()
、NotationDeclHandler()
和UnparsedEntityDeclHandler()
函式。
- xmlparser.GetInputContext()¶
以字串形式返回生成當前事件的輸入資料。資料採用包含文字的實體的編碼。當在事件處理程式未處於活動狀態時呼叫時,返回值是
None
。
- xmlparser.ExternalEntityParserCreate(context[, encoding])¶
建立一個“子”解析器,該解析器可用於解析父解析器解析的內容引用的外部已解析實體。context 引數應該是傳遞給
ExternalEntityRefHandler()
處理函式(如下所述)的字串。建立子解析器時,ordered_attributes
和specified_attributes
設定為該解析器的值。
- xmlparser.SetParamEntityParsing(flag)¶
控制引數實體(包括外部 DTD 子集)的解析。可能的 flag 值是
XML_PARAM_ENTITY_PARSING_NEVER
、XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE
和XML_PARAM_ENTITY_PARSING_ALWAYS
。如果設定標誌成功,則返回 true。
- xmlparser.UseForeignDTD([flag])¶
如果使用 true 值(預設值)呼叫此方法,Expat 將使用
None
作為所有引數來呼叫ExternalEntityRefHandler
,以便載入備用 DTD。如果文件不包含文件型別宣告,則仍將呼叫ExternalEntityRefHandler
,但不會呼叫StartDoctypeDeclHandler
和EndDoctypeDeclHandler
。為 flag 傳遞 false 值將取消先前傳遞 true 值的呼叫,但除此之外沒有其他作用。
此方法只能在呼叫
Parse()
或ParseFile()
方法之前呼叫;在呼叫其中任何一個方法之後呼叫它會導致引發ExpatError
,且code
屬性設定為errors.codes[errors.XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING]
。
- xmlparser.SetReparseDeferralEnabled(enabled)¶
警告
呼叫
SetReparseDeferralEnabled(False)
具有安全隱患,如下文詳述;請務必在執行SetReparseDeferralEnabled
方法之前瞭解這些後果。Expat 2.6.0 引入了一種名為“重新解析延遲”的安全機制,其中不再因重新解析大型標記導致二次執行時的拒絕服務,而是預設延遲重新解析未完成的標記,直到達到足夠的輸入量。由於此延遲,註冊的處理程式可能(取決於推送到 Expat 的輸入塊的大小)在將新輸入推送到解析器後不再立即呼叫。如果需要立即反饋並承擔防止大型標記導致拒絕服務的責任,則呼叫
SetReparseDeferralEnabled(False)
會暫時或完全停用當前 Expat 解析器例項的重新解析延遲。呼叫SetReparseDeferralEnabled(True)
允許重新啟用重新解析延遲。請注意,
SetReparseDeferralEnabled()
已作為安全修復程式反向移植到某些先前的 CPython 版本。如果在跨多個 Python 版本執行的程式碼中使用,請使用hasattr()
檢查SetReparseDeferralEnabled()
的可用性。在版本 3.13 中新增。
- xmlparser.GetReparseDeferralEnabled()¶
返回給定 Expat 解析器例項當前是否啟用了重新解析延遲。
在版本 3.13 中新增。
xmlparser
物件具有以下屬性
- xmlparser.buffer_size¶
當
buffer_text
為 true 時使用的緩衝區大小。可以透過為此屬性分配新的整數值來設定新的緩衝區大小。當大小更改時,緩衝區將被重新整理。
- xmlparser.buffer_text¶
將其設定為 true 會導致
xmlparser
物件緩衝 Expat 返回的文字內容,以儘可能避免多次呼叫CharacterDataHandler()
回撥。這可以大大提高效能,因為 Expat 通常會在每個行尾將字元資料分成塊。預設情況下,此屬性為 false,並且可以隨時更改。請注意,當它為 false 時,不包含換行符的資料也可能被分塊。
- xmlparser.buffer_used¶
如果啟用了
buffer_text
,則為緩衝區中儲存的位元組數。這些位元組表示 UTF-8 編碼的文字。當buffer_text
為 false 時,此屬性沒有實際意義。
- xmlparser.ordered_attributes¶
將此屬性設定為非零整數會導致屬性作為列表而不是字典報告。屬性以在文件文字中找到的順序呈現。對於每個屬性,會顯示兩個列表項:屬性名稱和屬性值。(此模組的早期版本也使用此格式。)預設情況下,此屬性為 false;可以隨時更改。
- xmlparser.specified_attributes¶
如果設定為非零整數,解析器將僅報告文件例項中指定的屬性,而不是那些從屬性宣告派生的屬性。設定此項的應用程式需要特別注意使用宣告中提供的其他資訊,以符合 XML 處理器行為的標準。預設情況下,此屬性為 false;可以隨時更改。
以下屬性包含與 xmlparser
物件遇到的最近錯誤相關的值,並且只有在呼叫 Parse()
或 ParseFile()
引發 xml.parsers.expat.ExpatError
異常後才具有正確的值。
- xmlparser.ErrorByteIndex¶
發生錯誤的位元組索引。
- xmlparser.ErrorCode¶
指定問題的數字程式碼。此值可以傳遞給
ErrorString()
函式,或與errors
物件中定義的常量進行比較。
- xmlparser.ErrorColumnNumber¶
發生錯誤的列號。
- xmlparser.ErrorLineNumber¶
發生錯誤的行號。
以下屬性包含與 xmlparser
物件中當前解析位置相關的值。在報告解析事件的回撥期間,它們指示生成事件的字元序列的第一個字元的位置。當在回撥之外呼叫時,指示的位置將剛好在最後一個解析事件之後(無論是否存在關聯的回撥)。
- xmlparser.CurrentByteIndex¶
解析器輸入中的當前位元組索引。
- xmlparser.CurrentColumnNumber¶
解析器輸入中的當前列號。
- xmlparser.CurrentLineNumber¶
解析器輸入中的當前行號。
以下是可以設定的處理程式列表。要在 xmlparser
物件 *o* 上設定處理程式,請使用 o.handlername = func
。 *handlername* 必須從以下列表中選取,而 *func* 必須是接受正確數量引數的可呼叫物件。除非另有說明,否則引數均為字串。
- xmlparser.XmlDeclHandler(version, encoding, standalone)¶
當解析 XML 宣告時呼叫。XML 宣告是 XML 建議的適用版本、文件文字的編碼以及可選的“獨立”宣告的(可選)宣告。*version* 和 *encoding* 將是字串,如果文件宣告為獨立文件,則 *standalone* 將為
1
;如果宣告為非獨立文件,則為0
;如果省略了獨立子句,則為-1
。這僅適用於 Expat 1.95.0 或更高版本。
- xmlparser.StartDoctypeDeclHandler(doctypeName, systemId, publicId, has_internal_subset)¶
當 Expat 開始解析文件型別宣告時呼叫(
<!DOCTYPE ...
)。*doctypeName* 按原樣提供。如果指定了系統識別符號和公共識別符號,則 *systemId* 和 *publicId* 引數會給出它們的值;如果省略了,則為None
。如果文件包含內部文件宣告子集,則 *has_internal_subset* 將為 true。這需要 Expat 1.2 或更高版本。
- xmlparser.EndDoctypeDeclHandler()¶
當 Expat 完成解析文件型別宣告時呼叫。這需要 Expat 1.2 或更高版本。
- xmlparser.ElementDeclHandler(name, model)¶
為每個元素型別宣告呼叫一次。*name* 是元素型別的名稱,*model* 是內容模型的表示形式。
- xmlparser.AttlistDeclHandler(elname, attname, type, default, required)¶
為元素型別的每個宣告的屬性呼叫。如果屬性列表宣告聲明瞭三個屬性,則此處理程式將被呼叫三次,每次呼叫一個屬性。*elname* 是宣告所應用的元素的名稱,而 *attname* 是宣告的屬性的名稱。屬性型別是以字串形式傳遞的 *type*;可能的值為
'CDATA'
、'ID'
、'IDREF'
等。如果屬性未由文件例項指定,則 *default* 給出屬性的預設值;如果沒有預設值(#IMPLIED
值),則為None
。如果屬性需要在文件例項中給出,則 *required* 將為 true。這需要 Expat 1.95.0 或更高版本。
- xmlparser.StartElementHandler(name, attributes)¶
為每個元素的開頭呼叫。*name* 是包含元素名稱的字串,而 *attributes* 是元素屬性。如果
ordered_attributes
為 true,則這是一個列表(有關完整說明,請參見ordered_attributes
)。否則,它是將名稱對映到值的字典。
- xmlparser.EndElementHandler(name)¶
為每個元素的結尾呼叫。
- xmlparser.ProcessingInstructionHandler(target, data)¶
為每個處理指令呼叫。
- xmlparser.CharacterDataHandler(data)¶
呼叫以處理字元資料。這將針對普通字元資料、CDATA 標記的內容和可忽略的空白符進行呼叫。必須區分這些情況的應用程式可以使用
StartCdataSectionHandler
、EndCdataSectionHandler
和ElementDeclHandler
回撥來收集所需的資訊。請注意,即使字元資料很短,也可能會被分塊,因此您可能會多次收到對CharacterDataHandler()
的呼叫。將buffer_text
例項屬性設定為True
可以避免這種情況。
- xmlparser.UnparsedEntityDeclHandler(entityName, base, systemId, publicId, notationName)¶
針對未解析的 (NDATA) 實體宣告呼叫。這僅適用於 Expat 庫的 1.2 版本;對於更新的版本,請改用
EntityDeclHandler
。(Expat 庫中的底層函式已被宣告為已過時。)
- xmlparser.EntityDeclHandler(entityName, is_parameter_entity, value, base, systemId, publicId, notationName)¶
針對所有實體宣告呼叫。對於引數實體和內部實體,value 將是一個字串,給出實體的宣告內容;對於外部實體,這將是
None
。對於已解析的實體,notationName 引數將是None
,對於未解析的實體,則是表示法的名稱。如果實體是引數實體,則 is_parameter_entity 將為 true,對於一般實體則為 false(大多數應用程式只需要關注一般實體)。這僅在 Expat 庫的 1.95.0 版本或更高版本中可用。
- xmlparser.NotationDeclHandler(notationName, base, systemId, publicId)¶
針對表示法宣告呼叫。如果給定 notationName、base、systemId 和 publicId,則它們是字串。如果省略了公共識別符號,則 publicId 將為
None
。
- xmlparser.StartNamespaceDeclHandler(prefix, uri)¶
當元素包含名稱空間宣告時呼叫。名稱空間宣告在為放置宣告的元素呼叫
StartElementHandler
之前處理。
- xmlparser.EndNamespaceDeclHandler(prefix)¶
當到達包含名稱空間宣告的元素的結束標記時呼叫。對於元素上的每個名稱空間宣告,以與呼叫
StartNamespaceDeclHandler
以指示每個名稱空間宣告作用域的開始順序相反的順序呼叫此函式。對此處理程式的呼叫在相應的EndElementHandler
之後進行,以表示元素的結束。
- xmlparser.CommentHandler(data)¶
針對註釋呼叫。data 是註釋的文字,不包括前導的
'<!-
-'
和尾隨的'-
->'
。
- xmlparser.StartCdataSectionHandler()¶
在 CDATA 部分的開頭呼叫。需要此函式和
EndCdataSectionHandler
才能識別 CDATA 部分的語法開頭和結尾。
- xmlparser.EndCdataSectionHandler()¶
在 CDATA 部分的末尾呼叫。
- xmlparser.DefaultHandler(data)¶
對於 XML 文件中沒有指定適用處理程式的任何字元呼叫。這意味著屬於可以報告的構造一部分,但沒有為其提供處理程式的字元。
- xmlparser.DefaultHandlerExpand(data)¶
這與
DefaultHandler()
相同,但不禁止內部實體的擴充套件。實體引用不會傳遞給預設處理程式。
- xmlparser.NotStandaloneHandler()¶
如果 XML 文件尚未宣告為獨立文件,則會呼叫此函式。當存在外部子集或對引數實體的引用,但 XML 宣告沒有在 XML 宣告中將 standalone 設定為
yes
時,會發生這種情況。如果此處理程式返回0
,則解析器將引發XML_ERROR_NOT_STANDALONE
錯誤。如果未設定此處理程式,則解析器不會為此條件引發異常。
- xmlparser.ExternalEntityRefHandler(context, base, systemId, publicId)¶
針對對外部實體的引用呼叫。base 是當前的基準,由先前呼叫
SetBase()
設定。公共識別符號和系統識別符號 systemId 和 publicId 如果給定則為字串;如果未給定公共識別符號,則 publicId 將為None
。context 值是不透明的,應僅按如下所述使用。要解析外部實體,必須實現此處理程式。它負責使用
ExternalEntityParserCreate(context)
建立子解析器,使用適當的回撥對其進行初始化並解析實體。此處理程式應返回一個整數;如果它返回0
,則解析器將引發XML_ERROR_EXTERNAL_ENTITY_HANDLING
錯誤,否則解析將繼續。如果未提供此處理程式,則外部實體將由
DefaultHandler
回撥報告(如果提供了回撥)。
ExpatError 異常¶
ExpatError
異常有許多有趣的屬性
- ExpatError.code¶
Expat 的內部錯誤編號,用於指示特定的錯誤。
errors.messages
字典將這些錯誤編號對映到 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])
- ExpatError.lineno¶
檢測到錯誤的行號。第一行的編號為
1
。
- ExpatError.offset¶
錯誤發生的行內的字元偏移量。第一列的編號為
0
。
示例¶
以下程式定義了三個處理程式,它們僅打印出其引數。
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)
此程式的輸出為
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
內容模型描述¶
內容模型使用巢狀的元組來描述。每個元組包含四個值:型別、量詞、名稱和一個子級元組。子級只是其他內容模型描述。
前兩個欄位的值是在 xml.parsers.expat.model
模組中定義的常量。這些常量可以分為兩組:模型型別組和量片語。
模型型別組中的常量為
- xml.parsers.expat.model.XML_CTYPE_ANY
由模型名稱命名的元素被宣告為具有
ANY
的內容模型。
- xml.parsers.expat.model.XML_CTYPE_CHOICE
命名的元素允許從多個選項中進行選擇;這用於諸如
(A | B | C)
之類的內容模型。
- 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
未給出修飾符,因此它可以恰好出現一次,如
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
模組中提供。這些常量在解釋發生錯誤時引發的 ExpatError
異常物件的某些屬性時很有用。由於出於向後相容性的原因,常量的值是錯誤訊息而不是數字錯誤程式碼,因此您可以透過將其 code
屬性與 errors.codes[errors.XML_ERROR_CONSTANT_NAME]
進行比較來實現此目的。
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¶
屬性值中的實體引用引用了外部實體而不是內部實體。
- xml.parsers.expat.errors.XML_ERROR_BAD_CHAR_REF¶
一個字元引用引用了 XML 中不合法的字元(例如,字元
0
,或 ‘�
’)。
- xml.parsers.expat.errors.XML_ERROR_BINARY_ENTITY_REF¶
一個實體引用引用了一個使用表示法宣告的實體,因此無法解析。
- xml.parsers.expat.errors.XML_ERROR_DUPLICATE_ATTRIBUTE¶
一個屬性在開始標記中使用了多次。
- xml.parsers.expat.errors.XML_ERROR_INCORRECT_ENCODING¶
- xml.parsers.expat.errors.XML_ERROR_INVALID_TOKEN¶
當輸入位元組無法正確分配給字元時引發;例如,UTF-8 輸入流中的 NUL 位元組(值
0
)。
- xml.parsers.expat.errors.XML_ERROR_JUNK_AFTER_DOC_ELEMENT¶
文件元素之後出現了空格以外的其他內容。
- xml.parsers.expat.errors.XML_ERROR_MISPLACED_XML_PI¶
XML 宣告出現在輸入資料的開頭以外的其他位置。
- xml.parsers.expat.errors.XML_ERROR_NO_ELEMENTS¶
文件不包含任何元素(XML 要求所有文件都包含一個且只有一個頂級元素)。
- xml.parsers.expat.errors.XML_ERROR_NO_MEMORY¶
Expat 無法在內部分配記憶體。
- xml.parsers.expat.errors.XML_ERROR_PARAM_ENTITY_REF¶
在不允許的位置找到了引數實體引用。
- xml.parsers.expat.errors.XML_ERROR_PARTIAL_CHAR¶
在輸入中找到了不完整的字元。
- xml.parsers.expat.errors.XML_ERROR_RECURSIVE_ENTITY_REF¶
一個實體引用包含了對同一實體的另一個引用;可能是透過不同的名稱,也可能是間接的。
- xml.parsers.expat.errors.XML_ERROR_SYNTAX¶
遇到了一些未指定的語法錯誤。
- xml.parsers.expat.errors.XML_ERROR_TAG_MISMATCH¶
一個結束標籤與最內層的開啟的開始標籤不匹配。
- xml.parsers.expat.errors.XML_ERROR_UNCLOSED_TOKEN¶
某個標記(例如開始標籤)在流結束或遇到下一個標記之前未關閉。
- xml.parsers.expat.errors.XML_ERROR_UNDEFINED_ENTITY¶
引用了一個未定義的實體。
- xml.parsers.expat.errors.XML_ERROR_UNKNOWN_ENCODING¶
Expat 不支援文件的編碼。
- xml.parsers.expat.errors.XML_ERROR_UNCLOSED_CDATA_SECTION¶
一個 CDATA 標記部分未關閉。
- 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¶
請求的操作需要編譯時包含 DTD 支援,但 Expat 的配置沒有 DTD 支援。標準構建的
xml.parsers.expat
模組不應報告此錯誤。
- xml.parsers.expat.errors.XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING¶
在解析開始後請求了一個行為更改,而該更改只能在解析開始之前進行。這(目前)僅由
UseForeignDTD()
引發。
- xml.parsers.expat.errors.XML_ERROR_UNBOUND_PREFIX¶
當啟用名稱空間處理時,發現了一個未宣告的字首。
- xml.parsers.expat.errors.XML_ERROR_UNDECLARING_PREFIX¶
文件試圖刪除與字首關聯的名稱空間宣告。
- xml.parsers.expat.errors.XML_ERROR_INCOMPLETE_PE¶
一個引數實體包含不完整的標記。
- xml.parsers.expat.errors.XML_ERROR_XML_DECL¶
文件根本不包含文件元素。
- xml.parsers.expat.errors.XML_ERROR_TEXT_DECL¶
在外部實體中解析文字宣告時出現錯誤。
- xml.parsers.expat.errors.XML_ERROR_PUBLICID¶
在公共 ID 中發現了不允許的字元。
- xml.parsers.expat.errors.XML_ERROR_SUSPENDED¶
對掛起的解析器執行了請求的操作,但不允許這樣做。這包括嘗試提供額外的輸入或停止解析器。
- xml.parsers.expat.errors.XML_ERROR_NOT_SUSPENDED¶
當解析器未掛起時,嘗試恢復解析器。
- xml.parsers.expat.errors.XML_ERROR_ABORTED¶
不應向 Python 應用程式報告此錯誤。
- xml.parsers.expat.errors.XML_ERROR_FINISHED¶
對已完成解析輸入的解析器執行了請求的操作,但不允許這樣做。這包括嘗試提供額外的輸入或停止解析器。
- xml.parsers.expat.errors.XML_ERROR_SUSPEND_PE¶
- xml.parsers.expat.errors.XML_ERROR_RESERVED_PREFIX_XML¶
嘗試取消宣告保留的名稱空間字首
xml
或將其繫結到另一個名稱空間 URI。
- xml.parsers.expat.errors.XML_ERROR_RESERVED_PREFIX_XMLNS¶
嘗試宣告或取消宣告保留的名稱空間字首
xmlns
。
- xml.parsers.expat.errors.XML_ERROR_RESERVED_NAMESPACE_URI¶
嘗試將保留的名稱空間字首
xml
和xmlns
的 URI 繫結到另一個名稱空間字首。
- 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¶
輸入放大因子(來自 DTD 和實體)的限制已被突破。
腳註