Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

je débute

3 réponses
Avatar
Eddy Maue
Bonjour,

voilà ci-bas un code simple que je suis entrain d'étudier et ce que je ne
comprends pas c'est que dans le main je doivent écrire

x=TransformXmlToPersonnes()

x = TransformXmlToPersonnes()
print "Nom :",x.getPersonnes()[0].nom
x=TransformXmlToPersonnes()
print "Prenom :",x.getPersonnes()[0].prenom
x=TransformXmlToPersonnes()
print "Adresse :",x.getPersonnes()[0].adresse


au lieu de

x=TransformXmlToPersonnes()

print "Nom :",x.getPersonnes()[0].nom
print "Prenom :",x.getPersonnes()[0].prenom
print "Adresse :",x.getPersonnes()[0].adresse


Simplement dans le 2ieme cas, il semble que l'objet X n'existe plus
lorsqu'utilisé 1 fois. Je suis obliger de faire 'x=TransformXmlToPersonnes()' à
chaque print

c'est normal et c'est comme ca que ca se passe en python ou quelque chose
cloche dans l'exemple téléchargé sur le net

a+ eddy



***************************************************************
* Personne.py
***************************************************************

import DebugIDE

class Adresse:

ville = None



def __init__(self):

pass


class Personne:

nom = None

prenom = None

adresse = None



def __init__(self):

pass





class TransformXmlToPersonnes:



__currentNode__ = None

__personneList__ = None



def __init__(self):

self.readXml()



def readXml(self):

from xml.dom.minidom import parse

self.doc = parse('personnes.xml')



def getRootElement(self):

if self.__currentNode__ == None:

self.__currentNode__ = self.doc.documentElement

return self.__currentNode__



def getPersonnes(self):

if self.__personneList__ != None:

return

self.__personneList__ = []

for personnes in
self.getRootElement().getElementsByTagName("personne"):

if personnes.nodeType == personnes.ELEMENT_NODE:

p = Personne()

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.__personneList__.append(p)

return self.__personneList__



def getAdresse(self, node):

adress = Adresse()

try:

adress.ville = self.getText(node.getElementsByTagName("ville")[0])

except:

adress.ville = ""

return adress



def getText(self, node):

return node.childNodes[0].nodeValue



if __name__ == "__main__":

x=TransformXmlToPersonnes()

print x.getPersonnes()[0].nom

x=TransformXmlToPersonnes()
print "Nom :",x.getPersonnes()[0].nom
x=TransformXmlToPersonnes()
print "Prenom :",x.getPersonnes()[0].prenom
x=TransformXmlToPersonnes()
print "Adresse :",x.getPersonnes()[0].adresse

3 réponses

Avatar
Méta-MCI \(MVP\)
Bonsoir !

Le premier appel à getPersonnes() remplit self.__personneList__ et
retourne une liste.

Mais, les appels suivants ne retournent rien (None), car
self.__personneList__ est déjà remplit. Donc, il n'y a rien en retour.

Mais, le fait de re-instancier TransformXmlToPersonnes() ré-initialise
le dispositif.

Le comportement que tu décris est donc en conformité avec le code.

@+

Michel Claveau
Avatar
Eddy Maue
Salut,

Comment pouvoir faire comme ca ?

x=TransformXmlToPersonnes()

print "Nom :",x.getPersonnes()[0].nom
print "Prenom :",x.getPersonnes()[0].prenom
print "Adresse :",x.getPersonnes()[0].adresse


a+ Eddy



Méta-MCI (MVP) a couché sur son écran :
Bonsoir !

Le premier appel à getPersonnes() remplit self.__personneList__ et retourne
une liste.

Mais, les appels suivants ne retournent rien (None), car
self.__personneList__ est déjà remplit. Donc, il n'y a rien en retour.

Mais, le fait de re-instancier TransformXmlToPersonnes() ré-initialise le
dispositif.

Le comportement que tu décris est donc en conformité avec le code.

@+

Michel Claveau


Avatar
BertrandB
Salut,

Comment pouvoir faire comme ca ?

x=TransformXmlToPersonnes()

print "Nom :",x.getPersonnes()[0].nom
print "Prenom :",x.getPersonnes()[0].prenom
print "Adresse :",x.getPersonnes()[0].adresse


a+ Eddy



Méta-MCI (MVP) a couché sur son écran :
Bonsoir !

Le premier appel à getPersonnes() remplit self.__personneList__ et
retourne une liste.

Mais, les appels suivants ne retournent rien (None), car
self.__personneList__ est déjà remplit. Donc, il n'y a rien en retour.

Mais, le fait de re-instancier TransformXmlToPersonnes() ré-initialise
le dispositif.

Le comportement que tu décris est donc en conformité avec le code.

@+

Michel Claveau



Michel a donné la réponse

def getPersonnes(self):

if self.__personneList__ = None:
self.__personneList__ = []
for personnes in
self.getRootElement().getElementsByTagName("personne"):
if personnes.nodeType == personnes.ELEMENT_NODE:
p = Personne()
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.__personneList__.append(p)

return self.__personneList__


attention avec les repliment de lignes je ne suis pas sur de l'ndentation