Essayer d'analyser un 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'obtiens l'erreur suivante:

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

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 de nombreux autres nœuds.

Je ne vois aucune ordure à la ligne 3, colonne 0? Je suppose qu'il doit y avoir une autre raison de l'erreur.

Le fichier .xml est généré par un logiciel externe MITK donc je suppose que cela devrait être correct.

Travailler sur Win 7, 64 bits, VS2015, Anaconda

18
jdelange 9 août 2016 à 17:32

3 réponses

Meilleure réponse

Comme l'a dit @Matthias Wiehl, ElementTree n'attend qu'un seul nœud racine et n'est pas un XML bien formé, qui devrait être corrigé à son origine. Pour contourner ce problème, vous pouvez ajouter un faux noeud racine au document.

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>")
19
Martin Valgur 23 juin 2018 à 08:33

Le nœud racine de votre document (Version) est ouvert et fermé à 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 9 août 2016 à 14:36

Essayez de réparer le document comme ceci. 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
Raja Sattiraju 9 août 2016 à 14:57