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://pythonlang.cn/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 和实体)的限制已被突破。
脚注