Bonjour,
Je suis tombé sur un cas incompréhensible lors du parcours d'une structure xml. Voici mon code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
for i in range(len(self.l_toxml)):
   print "self.l_toxml[%d]=%s   child=%s" % (i,self.l_toxml[i],self.l_toxml[0].childNodes)
mainChild = self.l_toxml[0].childNodes[0]
for toxml in self.l_toxml[1:]:
   for i in range(len(toxml.childNodes)):
      print "   toxml.childNodes[%d]=%s   child=%s" % (i,toxml.childNodes[i],toxml.childNodes[i].childNodes)
      for elt in toxml.childNodes[i].childNodes:
         print "      elt=%s" % (elt)
         mainChild.appendChild(elt)
les traces suivantes illustrent que dans l'exécution de la boucle la plus profonde (ligne 8), 3 éléments sont à explorer alors que le pg ne va que 2 fois dans cette boucle :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
self.l_toxml[0]=<xml.dom.minidom.Document instance at 0xb7bce1cc>   child=[<DOM Element: message:AIXMBasicMessage at 0xb7bea4ec>]
self.l_toxml[1]=<xml.dom.minidom.Document instance at 0xb7b4d92c>   child=[<DOM Element: message:AIXMBasicMessage at 0xb7bea4ec>]
self.l_toxml[2]=<xml.dom.minidom.Document instance at 0xb7b5336c>   child=[<DOM Element: message:AIXMBasicMessage at 0xb7bea4ec>]
self.l_toxml[3]=<xml.dom.minidom.Document instance at 0xb7b6248c>   child=[<DOM Element: message:AIXMBasicMessage at 0xb7bea4ec>]
self.l_toxml[4]=<xml.dom.minidom.Document instance at 0xb7b6cccc>   child=[<DOM Element: message:AIXMBasicMessage at 0xb7bea4ec>]
self.l_toxml[5]=<xml.dom.minidom.Document instance at 0xb7b72d8c>   child=[<DOM Element: message:AIXMBasicMessage at 0xb7bea4ec>]
self.l_toxml[6]=<xml.dom.minidom.Document instance at 0xb7afa10c>   child=[<DOM Element: message:AIXMBasicMessage at 0xb7bea4ec>]
   toxml.childNodes[0]=<DOM Element: message:AIXMBasicMessage at 0xb7b4da2c>   child=[<DOM Text node "u'\n\t'">, <DOM Element: message:hasMember at 0xb7b4deec>, <DOM Text node "u'\n'">]
      elt=<DOM Text node "u'\n\t'">
      elt=<DOM Text node "u'\n'">
   toxml.childNodes[0]=<DOM Element: message:AIXMBasicMessage at 0xb7b57d8c>   child=[<DOM Text node "u'\n\t'">, <DOM Element: message:hasMember at 0xb7b5d26c>,
...
Par contre avec la modification suivante de mon code, tout se passe correctement, mais je ne vois pas le rapport :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
for i in range(len(self.l_toxml)):
   print "self.l_toxml[%d]=%s   child=%s" % (i,self.l_toxml[i],self.l_toxml[0].childNodes)
mainChild = self.l_toxml[0].childNodes[0]
   for toxml in self.l_toxml[1:]:
      for i in range(len(toxml.childNodes)):
         print "   toxml.childNodes[%d]=%s   child=%s" % (i,toxml.childNodes[i],toxml.childNodes[i].childNodes)
         elt = []
         elt.append(toxml.childNodes[i].childNodes[0])
         elt.append(toxml.childNodes[i].childNodes[1])
         elt.append(toxml.childNodes[i].childNodes[2])
         for j in range(len(toxml.childNodes[i].childNodes)):
            print "      elt[%d]=%s" % (j,elt[j])
            mainChild.appendChild(elt[j])
et les traces correspondantes:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
self.l_toxml[0]=<xml.dom.minidom.Document instance at 0xb7c6e1cc>   child=[<DOM Element: message:AIXMBasicMessage at 0xb7c8a4ec>]
self.l_toxml[1]=<xml.dom.minidom.Document instance at 0xb7bed92c>   child=[<DOM Element: message:AIXMBasicMessage at 0xb7c8a4ec>]
self.l_toxml[2]=<xml.dom.minidom.Document instance at 0xb7bf336c>   child=[<DOM Element: message:AIXMBasicMessage at 0xb7c8a4ec>]
self.l_toxml[3]=<xml.dom.minidom.Document instance at 0xb7c0248c>   child=[<DOM Element: message:AIXMBasicMessage at 0xb7c8a4ec>]
self.l_toxml[4]=<xml.dom.minidom.Document instance at 0xb7c0cccc>   child=[<DOM Element: message:AIXMBasicMessage at 0xb7c8a4ec>]
self.l_toxml[5]=<xml.dom.minidom.Document instance at 0xb7c12d8c>   child=[<DOM Element: message:AIXMBasicMessage at 0xb7c8a4ec>]
self.l_toxml[6]=<xml.dom.minidom.Document instance at 0xb7b9a10c>   child=[<DOM Element: message:AIXMBasicMessage at 0xb7c8a4ec>]
   toxml.childNodes[0]=<DOM Element: message:AIXMBasicMessage at 0xb7beda2c>   child=[<DOM Text node "u'\n\t'">, <DOM Element: message:hasMember at 0xb7bedeec>, <DOM Text node "u'\n'">]
      elt[0]=<DOM Text node "u'\n\t'">
      elt[1]=<DOM Element: message:hasMember at 0xb7bedeec>
      elt[2]=<DOM Text node "u'\n'">
   toxml.childNodes[0]=<DOM Element: message:AIXMBasicMessage at 0xb7bf7d8c>   child=[<DOM Text node "u'\n\t'">, <DOM Element: message:hasMember at 0xb7bfd26c>, <DOM Text node "u'\n'">]
...
Toute explication est la bienvenue.
Merci