Bonjour,
j'effectue un stage dans une entreprise et je suis entrain de me former au langage python. L'entreprise me contraint à utiliser la version 2.2.1.

J'ai écrit un code qui permet de parser un xml, dans lequel sont stockés des personnes (principe du carnet d'adresse mais très simplifié). Mon premier fichier xml a été ecrit manuellement et il est parsé sans problème. Ensuite j'ai décider de créer de nouveaux objets Personnes qui seront stockés dans un deuxième fichier. Pour cela j'utilise la méthode writeXML. Le fichier est bien écrit sauf que quand je veux le lire le parse ne fonctionne plus. En réalité il fonctionne mais mes valeur de balises sont des chaînes vides.

Le premier fichier xml : personnes.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" ?>
<quil>
    <personne>
        <nom>Durant</nom>
        <prenom>Stephan</prenom>
        <adresse>
            <ville>Bruxelles</ville>
        </adresse>
    </personne>
 
    <personne>
        <nom>Dupont</nom>
        <prenom>Henri</prenom>
        <adresse/>
    </personne>
</quil>
Mon application python : testDom.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#!/usr/bin/env python
#coding=utf-8
 
from xml.dom.minidom import parse
from xml.dom.minidom import Document
 
class Adresse:
    ville = None
 
    def __init__(self):
        pass
 
 
class Personne:
    nom = None
    prenom = None
    adresse = Adresse()
 
    def __init__(self):
        pass
 
class XmlToPersonnes:
    __currentNode__ = None
    __personList__ = None
 
    def __init__(self, fichier):
        self.realXml(fichier)
 
    def realXml(self, fichier):
        self.doc = parse(fichier)
 
    def getRootElement(self):
        if self.__currentNode__ == None:
            self.__currentNode__ = self.doc.documentElement
        print str(self.__currentNode__)
        return self.__currentNode__
 
    def getPersonnes(self):
        if self.__personList__ != None:
            return
        self.__personList__ = []
        for personnes in self.getRootElement().getElementsByTagName("personne"):
            if personnes.nodeType == personnes.ELEMENT_NODE:
                p = Personne()
                print "nom = ",self.getText(personnes.getElementsByTagName("nom")[0])
                try:
                    p.nom = self.getText(personnes.getElementsByTagName("nom")[0])
                    p.prenom = self.getText(personnes.getElementsByTagName("prenom")[0])
                    p.adresse = self.getAdresse(personnes.getElementsByTagName("adresse")[0])
                except:
                    print "un des TAGS suivant est manquents : nom, prenom, adresse"
                self.__personList__.append(p)
        return self.__personList__
 
    def getAdresse(self, node):
        adress = Adresse()
        try:
            adress.ville = self.getText(node.getElementsByTagName("ville")[0])
        except:
            adress.ville = None
        return adress
 
    def getText(self, node):
        return node.childNodes[0].nodeValue
 
class PersonnesToXml:
    def __init__(self):
        self.doc = Document()
 
    def setPersonnes(self, personnes):
        quil = self.doc.createElement("quil")
        self.doc.appendChild(quil)
        for pers in personnes:
            personne = self.doc.createElement("personne")
            quil.appendChild(personne)
 
            nom = self.doc.createElement("nom")
            personne.appendChild(nom)
            nomText = self.doc.createTextNode(pers.nom)
            nom.appendChild(nomText)
 
            prenom = self.doc.createElement("prenom")
            personne.appendChild(prenom)
            prenomText = self.doc.createTextNode(pers.prenom)
            prenom.appendChild(prenomText)
 
            adresse = self.doc.createElement("adresse")
            personne.appendChild(adresse)
 
            ville = self.doc.createElement("ville")
            adresse.appendChild(ville)
            villeText = self.doc.createTextNode(pers.adresse.ville)
            ville.appendChild(villeText)  
 
    def sauvegarderXml(self):
        fichier = open("carnet.xml", "w")
        self.doc.writexml(fichier, "    ", "", "\n")
        fichier.close()
 
if __name__ == "__main__":
        x = XmlToPersonnes("carnet.xml")
#        x = XmlToPersonnes("personnes.xml")
        for personne in x.getPersonnes():
            print "*********************"
            print personne.nom
            print personne.prenom
            print personne.adresse.ville
            print "*********************"
        a1 = Adresse()
        a1.ville = "OSNY"
        p1 = Personne()
        p1.nom = "BROUARD"
        p1.prenom = "Bastien"
        p1.adresse = a1
 
        a2 = Adresse()
        a2.ville = "CERGY"
        p2 = Personne()
        p2.nom = "LESAGE"
        p2.prenom = "Olivier"
        p2.adresse = a2
 
        p3 = Personne()
        p3.nom = "RICHARD"
        p3.prenom = "Yoan"
        p3.adresse = a1
 
        listPersonnes = []
        listPersonnes.append(p1)
        listPersonnes.append(p2)
        listPersonnes.append(p3)
        ptx = PersonnesToXml()
        ptx.setPersonnes(listPersonnes)
        ptx.sauvegarderXml()
Resultat du parsing de personnes.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
> C:\tools\python2.2.1\python.exe -u "C:\Documents and Settings\g551918\Mes documents\MesProgrammesPython\testDom.py" 
<DOM Element: quil at 10405040>
nom =  Durant
nom =  Dupont
*********************
Durant
Stephan
Bruxelles
*********************
*********************
Dupont
Henri
None
*********************
Fichier xml généré par l'application : carnet.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?xml version="1.0" ?>
    <quil>
    <personne>
    <nom>
    BROUARD
    </nom>
    <prenom>
    Bastien
    </prenom>
    <adresse>
    <ville>
    OSNY
    </ville>
    </adresse>
    </personne>
    <personne>
    <nom>
    LESAGE
    </nom>
    <prenom>
    Olivier
    </prenom>
    <adresse>
    <ville>
    CERGY
    </ville>
    </adresse>
    </personne>
    <personne>
    <nom>
    RICHARD
    </nom>
    <prenom>
    Yoan
    </prenom>
    <adresse>
    <ville>
    OSNY
    </ville>
    </adresse>
    </personne>
    </quil>
Resultat du parsing de carnet.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
> C:\tools\python2.2.1\python.exe -u "C:\Documents and Settings\g551918\Mes documents\MesProgrammesPython\testDom.py" 
<DOM Element: quil at 10405272>
nom =  
 
nom =  
 
nom =  
 
*********************
 
 
 
 
 
 
*********************
*********************
 
 
 
 
 
 
*********************
*********************
 
 
 
 
 
 
*********************
Cependant j'ai pu observé qu'en indentant manuellement le fichier carnet.xml comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" ?>
    <quil>
        <personne>
            <nom>BROUARD</nom>
            <prenom>Bastien</prenom>
            <adresse>
                <ville>OSNY</ville>
            </adresse>
        </personne>
        <personne>
            <nom>LESAGE</nom>
            <prenom>Olivier</prenom>
            <adresse>
                <ville>CERGY</ville>
            </adresse>
        </personne>
        <personne>
            <nom>RICHARD</nom>
            <prenom>Yoan</prenom>
            <adresse>
                <ville>OSNY</ville>
            </adresse>
        </personne>
    </quil>
Le parsing fonctionneme parfaitement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
> C:\tools\python2.2.1\python.exe -u "C:\Documents and Settings\g551918\Mes documents\MesProgrammesPython\testDom.py" 
<DOM Element: quil at 10405336>
nom =  BROUARD
nom =  LESAGE
nom =  RICHARD
*********************
BROUARD
Bastien
OSNY
*********************
*********************
LESAGE
Olivier
CERGY
*********************
*********************
RICHARD
Yoan
OSNY
*********************
Ma question est comment reussir à bien formatter le fichier xml en sortie ou bien faire en sorte que le parsing ne dépende pas du formatage ?

PS : il m'est interdit de passer à la version supérieure de python

Merci