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
Ответы
Ответ 1
Как сказал @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>")
Ответ 2
Корень node вашего документа (Version
) открыт и закрыт в строке 2. Парсер не ожидает ни одного узла после корня node. Решение состоит в том, чтобы удалить закрытие косой черты.
Ответ 3
Попробуйте восстановить этот документ. Закройте элемент version
в конце
<?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>
</Version>