web-dev-qa-db-fra.com

Python XML: ParseError: indésirable après l'élément de document

Essayer d'analyser le fichier XML dans ElementTree:

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

J'ai l'erreur suivante:

Traceback (appel le plus récent en dernier): Fichier "", ligne 1, dans Fichier "C:\Programme Fichiers\Anaconda2\lib\xml\etree\ElementTree.py", ligne 611, dans init self.parse (fichier) Fichier "", ligne 38, dans l'analyse ParseError: indésirable après l'élément de document: ligne 3, colonne 0

Le fichier XML commence comme ceci:

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

suivi par beaucoup plus de nœuds.

Je ne vois pas de courrier indésirable à la ligne 3, colonne 0? Je suppose qu'il doit y avoir une autre raison pour l'erreur.

Le fichier .xml est généré par un logiciel externe MITK donc je suppose que ça devrait aller.

Travailler sur Win 7, 64 bits, VS2015, Anaconda

9
jdelange

Comme @Matthias Wiehl l'a dit, ElementTree n'attend qu'un seul nœud racine et n'est pas un XML bien formé, ce qui devrait être corrigé à son origine.

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

Le nœud racine de votre document (Version) est ouvert et fermé sur la ligne 2. L'analyseur n'attend aucun nœud après le nœud racine. La solution consiste à supprimer la barre oblique de fermeture.

2
Matthias Wiehl

Essayez de réparer le document comme ça. Fermez l'élément version à la fin

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