Partage
  • Partager sur Facebook
  • Partager sur Twitter

[minidom] Liste des attributs

avec boucle for

Sujet résolu
    23 décembre 2010 à 12:54:26

    Bonjour, j'essaye de lister tout les attributs de mes balises avec le module minidom.

    Voici mon fichier XML :

    <?xml version="1.0" ?>
    <scores>
    	<score joueur="darkrojo" points="0"/>
    	<score joueur="darkrojo" points="1"/>
    </scores>
    


    Mon programme (certes simple) :
    from xml.dom.minidom import *
    
    doc = parse("out.xml")
    
    racine = doc.childNodes[0]
    for e in racine.getElementsByTagName("score"):
    	for attrib in e.attributes:
    		print attrib.name, ":", attrib.value
    


    Cependant j'obtiens l'erreur suivante :

    Traceback (most recent call last):
      File "writer.py", line 7, in <module>
        for attrib in e.attributes:
      File "/usr/lib/python2.6/xml/dom/minidom.py", line 530, in __getitem__
        return self._attrs[attname_or_tuple]
    KeyError: 0


    Merci de bien vouloir m'éclairer, je débute avec ce module :)
    • Partager sur Facebook
    • Partager sur Twitter
      24 décembre 2010 à 18:27:26

      Salut,

      D'après la base de référence python (2.6 en tout cas) tu ne peux pas appeler les valeurs de l'objet "attributes" comme tu l'as fait.

      Essaye plutôt ce code :

      from xml.dom.minidom import *
      
      doc = parse("out.xml")
      
      racine = doc.childNodes[0]
      for e in racine.getElementsByTagName("score"):
          #print e.attributes
          for name in ["joueur", "points"] :
              print "%s : %s" % (name, e.attributes[name].value)

      Naturellement ça nécessite de connaitre à l'avance les étiquettes de tes données (ici joueur et points) mais le résultat est celui que tu cherches je crois.

      P.S. désolé pour la présentation du code la balise python n'est pas accessible depuis l'écran de mon portable.
      • Partager sur Facebook
      • Partager sur Twitter
        25 décembre 2010 à 13:07:24

        @darkjoro, tu n'a pas précisé quelle version de python que tu utilise, je vais considérer que tu utilise python2.6.

        Le code de Lexileduval est un bon début, mais il y a moyen de lister tous les attributs d'un node avec ce code :
        from xml.dom.minidom import *
        
        doc = parse("out.xml")
        
        racine = doc.firstChild
        for e in racine.getElementsByTagName("score"):
        	attributes = e.attributes
        	for a in attributes.items():
        	   print a[0], ":", a[1]
        


        Un conseil quand tu ne sait pas quel type d'objet tu utilise, exécute ton script pas à pas, et quand tu ne sais pas quels méthodes a l'objet considéré, un petit appel à la fonction dir() sur ton objet te listera les attributs de celui-ci, méthode comprises.

        Conseil ++ : Installe ipython, il te simplifiera le développement en te proposant l'autocomplétion sur les attributs des objets.
        • Partager sur Facebook
        • Partager sur Twitter
          25 décembre 2010 à 17:25:17

          A Trias : pas bête du tout, c'est vrai j'avais oublié que attributes est un objet de type map ^^
          • Partager sur Facebook
          • Partager sur Twitter
            25 décembre 2010 à 23:21:26

            Ah voilà c'est parce-que je croyais que ça retournait une liste mais en fait c'était une map ;)

            Merci :)
            • Partager sur Facebook
            • Partager sur Twitter
              26 décembre 2010 à 15:26:28

              N'oublie pas de mettre le sujet en résolu !
              • Partager sur Facebook
              • Partager sur Twitter

              [minidom] Liste des attributs

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown