wake-up-neo.com

Python XML: ParseError: Junk nach Dokumentelement

Versuch, eine XML-Datei in ElementTree zu parsen:

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

Ich erhalte folgende Fehlermeldung:

Traceback (letzter Anruf zuletzt): Datei "", Zeile 1, in Datei "C:\Programm Dateien\Anaconda2\lib\xml\etree\ElementTree.py", Zeile 611 in init self.parse (Datei) Datei "", Zeile 38, in parse ParseError: Junk nach Dokumentelement: Zeile 3, Spalte 0

XML-Datei beginnt wie folgt:

<?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>

gefolgt von vielen weiteren Knoten.

Ich sehe keinen Müll in Zeile 3, Spalte 0? Ich gehe davon aus, dass es einen anderen Grund für den Fehler geben muss.

Die .xml-Datei wird von der externen Software MITK generiert. Ich gehe davon aus, dass dies in Ordnung sein sollte.

Arbeitet an Win 7, 64 Bit, VS2015, Anaconda

9
jdelange

Wie bei @Matthias Wiehl sagte, erwartet ElementTree nur einen einzigen Wurzelknoten und ist kein wohlgeformtes XML-Dokument, das an seinem Ursprung festgelegt werden sollte .. Als Problemumgehung können Sie dem Dokument einen gefälschten Wurzelknoten hinzufügen.

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>")
12
Martin Valgur

Der Wurzelknoten Ihres Dokuments (Version) wird in Zeile 2 und closed geöffnet. Der Parser erwartet nach dem Wurzelknoten keine Knoten. Die Lösung besteht darin, den schließenden Schrägstrich zu entfernen.

2
Matthias Wiehl

Reparieren Sie das Dokument so. Schließen Sie das version-Element am Ende

<?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>
0
Mechanic