Python 读取包含二进制内容的XML

Python 读取包含二进制内容的XML,python,xml,Python,Xml,我想使用Python来读取VTU文件,该文件是XML,可能包含二进制数据。说: 有一种情况下,该文件不是有效的XML文档。当AppendedData节未编码为base64时, 存在可能违反XML规范的原始二进制数据。这不是默认行为,必须显式启用 由用户提供 例如,检查: _$É�����在196年的一次比赛中,本次比赛中的一名球员在本次比赛中的一名球员在本次比赛中的一名球员在本次比赛中的一名球员在本次比赛中的一名球员在本次比赛中的一名比赛中的一名球员在本次比赛中的一名球员在本次比赛中的一名球员

我想使用Python来读取VTU文件,该文件是XML,可能包含二进制数据。说:

有一种情况下,该文件不是有效的XML文档。当AppendedData节未编码为base64时, 存在可能违反XML规范的原始二进制数据。这不是默认行为,必须显式启用 由用户提供

例如,检查:


_$É�����在196年的一次比赛中,本次比赛中的一名球员在本次比赛中的一名球员在本次比赛中的一名球员在本次比赛中的一名球员在本次比赛中的一名球员在本次比赛中的一名比赛中的一名球员在本次比赛中的一名球员在本次比赛中的一名球员在本次比赛中的一场比赛中,本次比赛在本次比赛中,本次比赛中,本次比赛在本次比赛中,本场比赛中,本场比赛在本场比赛中,本场比赛中,本场比赛在本场比赛中,本场比赛在本场比赛中,本场比赛在本本场比赛本场比赛本场比赛本场比赛本场比赛中,本场在本本场比赛本场比赛本场比赛本场比赛本场比赛本场比赛本场比赛本本本场比赛本场比赛本场比赛本场比赛本本本场比赛本场比赛本场比赛本场比赛本本场比赛本本场比赛本阿尔法
[...]
天真地做

将xml.etree.ElementTree作为ET导入
parser=ET.XMLParser()
tree=ET.parse(“dragon.vtu”,解析器)
不起作用:

回溯(最近一次呼叫最后一次):
文件“f.py”,第3行,在
tree=ET.parse(“dragon.vtu”,解析器)
文件“/usr/lib/python3.7/xml/etree/ElementTree.py”,第1197行,在parse中
parse(源,解析器)
文件“/usr/lib/python3.7/xml/etree/ElementTree.py”,第604行,解析中
提要(数据)
xml.etree.ElementTree.ParseError:格式不正确(无效令牌):第28行第5列

有什么提示吗?

问题是,由于数据包含非法字符,因此不是XML,因此任何符合XML的解析器都会正确地拒绝它

解决上游问题:与其直接嵌入二进制数据,不如先将其编码为

另请参见



我无法解决上游问题…

那么,您就不幸地收到了非XML的数据。请参见以下选项:

…因为二进制内容是VTU规范的一部分。


任何包含XML中无约束二进制数据的规范都会被破坏。您可以选择解析错误的XML(请参见上面的链接),只使用罪犯提供的库/工具包,或者编写自己的库/工具包,这些都不是很好的选择,但这是供应商不遵循XML规范的后果。

我无法解决上游问题,因为二进制内容是VTU规范的一部分。我添加了一个原始问题的链接。规格很好。那么现实就不同了。@Gzorg:遵循的规范甚至更好。现实可能是错误已经发生。错误应该从源头上纠正。如果不可能,请参阅
Traceback (most recent call last):
  File "f.py", line 3, in <module>
    tree = ET.parse("dragon.vtu", parser)
  File "/usr/lib/python3.7/xml/etree/ElementTree.py", line 1197, in parse
    tree.parse(source, parser)
  File "/usr/lib/python3.7/xml/etree/ElementTree.py", line 604, in parse
    parser.feed(data)
xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 28, column 5