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://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])¶
调用此方法并将 *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 版本加入。
脚注