xml.parsers.expat
— 使用 Expat 進行快速 XML 解析¶
備註
如果您需要解析不受信任或未經身份驗證的資料,請參閱 XML 安全。
xml.parsers.expat
模組是 Expat 非驗證 XML 解析器的 Python 介面。該模組提供了一個單一的擴充套件型別 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* 的值來啟用。該值必須是一個單字元字串;如果字串長度非法(
None
被視為與省略相同),則會引發ValueError
。啟用名稱空間處理後,屬於名稱空間的元素型別名稱和屬性名稱將被展開。傳遞給元素處理程式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])¶
呼叫此方法並將 *flag* 設定為 true(預設值)將導致 Expat 呼叫
ExternalEntityRefHandler
,所有引數均為None
,以允許載入替代 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,否則為通用實體(大多數應用程式只關心通用實體)。這僅從 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 宣告中未將 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 輸入流中的空位元組(值
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 和實體)的限制已被突破。
- xml.parsers.expat.errors.XML_ERROR_NOT_STARTED¶
解析器在啟動之前嘗試停止或暫停。
在 3.14 版本加入。
腳註