xml.parsers.expat
— 使用 Expat 快速解析 XML¶
警告
pyexpat
模块无法抵御恶意构建的数据攻击。如果您需要解析不受信任或未经身份验证的数据,请参阅 XML 漏洞。
xml.parsers.expat
模块是 Python 中用于 Expat 非验证 XML 解析器的接口。该模块提供了一个扩展类型,xmlparser
,它表示 XML 解析器的当前状态。在创建 xmlparser
对象后,可以将该对象的各种属性设置为处理函数。然后,当将 XML 文档提供给解析器时,将为 XML 文档中的字符数据和标记调用处理函数。
此模块使用 pyexpat
模块来提供对 Expat 解析器的访问。不建议直接使用 pyexpat
模块。
此模块提供了一个异常和一个类型对象
- 异常 xml.parsers.expat.ExpatError¶
当 Expat 报告错误时引发的异常。有关解释 Expat 错误的更多信息,请参阅 ExpatError 异常 部分。
- 异常 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://www.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 使用
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.12.3 版新增。
- xmlparser.GetReparseDeferralEnabled()¶
返回当前是否为给定的 Expat 解析器实例启用了重新解析延迟。
3.12.3 版新增。
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 给出当文档实例未指定属性时使用的属性的默认值,如果不存在默认值,则为None
(#IMPLIED
值)。如果文档实例中需要提供该属性,则 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)实体声明调用。这仅适用于 1.2 版的 Expat 库;对于更新的版本,请改用
EntityDeclHandler
。(Expat 库中的底层函数已被声明为过时。)
- xmlparser.EntityDeclHandler(entityName, is_parameter_entity, value, base, systemId, publicId, notationName)¶
为所有实体声明调用。对于参数实体和内部实体,value 将是一个字符串,给出实体的声明内容;对于外部实体,这将是
None
。 notationName 参数对于已解析的实体将为None
,对于未解析的实体将为符号的名称。如果实体是参数实体,则 is_parameter_entity 将为 true,对于一般实体(大多数应用程序只需要关注一般实体),则为 false。这仅在 1.95.0 或更高版本的 Expat 库中可用。
- 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 和实体)的限制已被突破。
脚注