Python XML:ParseError:文档元素后的垃圾

新手上路,请多包涵

尝试将 XML 文件解析为 ElementTree:

 >>> import xml.etree.cElementTree as ET
>>> tree = ET.ElementTree(file='D:\Temp\Slikvideo\JPEG\SV_4_1_mask\index.xml')

我收到以下错误:

 Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files\Anaconda2\lib\xml\etree\ElementTree.py", line 611, in __init__
    self.parse(file)
  File "<string>", line 38, in parse
ParseError: junk after document element: line 3, column 0

XML 文件是这样开始的:

 <?xml version="1.0" encoding="UTF-8" ?>
<Version Writer="E:\d\src\Modules\SceneSerialization\src\mitkSceneIO.cpp" Revision="$Revision: 17055 $" FileVersion="1" />
<node UID="OBJECT_2016080819041580480127">
    <source UID="OBJECT_2016080819041550469454" />
    <data type="LabelSetImage" file="hfbaaa_Bolus.nrrd" />
    <properties file="sicaaa" />
</node>
<node UID="OBJECT_2016080819041512769572">
    <source UID="OBJECT_2016080819041598947781" />
    <data type="LabelSetImage" file="ifbaaa_Bolus.nrrd" />
    <properties file="ticaaa" />
</node>

接下来是更多的节点。

我在第 3 行第 0 列中没有看到任何垃圾?我认为必须有另一个错误原因。

.xml 文件是由外部软件 MITK 生成的,所以我认为应该没问题。

在 Win 7、64 位、VS2015、Anaconda 上工作

原文由 jdelange 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 681
2 个回答

正如@Matthias Wiehl 所说,ElementTree 只需要一个根节点,并且不是格式正确的 XML,应该在其原点固定。作为一种变通方法,您可以向文档中添加一个伪造的根节点。

 import xml.etree.cElementTree as ET
import re

with open("index.xml") as f:
    xml = f.read()
tree = ET.fromstring(re.sub(r"(<\?xml[^>]+\?>)", r"\1<root>", xml) + "</root>")

原文由 Martin Valgur 发布,翻译遵循 CC BY-SA 4.0 许可协议

您文档的根节点 ( Version ) 在第 2 行打开 关闭。解析器不希望在根节点之后有任何节点。解决方案是删除关闭的正斜杠。

原文由 Matthias Wiehl 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题