IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

compter le nombre de balise d'un fichier xml


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Points : 93
    Points
    93
    Par défaut compter le nombre de balise d'un fichier xml
    Bonjour dans mon code python j'ai défini une structure 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
    <quil>
     
        <personne>
     
            <nomPrenom nom="Durant" prenom="Stephan">
                <indice nome="1" type="1"/>
                <indice nome="2" type="2"/>
     
            </nomPrenom>
     
     
        </personne>
     
        <personne>
     
            <nomPrenom nom="d" prenom="e">
                <indice nome="3" type="1"/>
                <indice nome="4" type="2"/>
            </nomPrenom>
     
     
        </personne>
     
     
     
    </quil>
    comment faire pour afficher le nombre des balises : personne ,nomPrenom et indice dans cette structure ?

  2. #2
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut
    Bonjour

    Évidemment, je ne connais pas ce sur quoi porte ton XML (DTD, schéma ?).

    Combien peux-tu avoir de fils "NomPrenom" dans un élément "Personne" ?

    Sinon, cherche du côté de minidom et de getElementsByTagName. Cette fonction va te renvoyer tous les éléments de ton XML portant le tagname spécifié en argument sous forme de liste.

    Du coup (bout de code clairement incomplet) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    lPersonnes = doc.getElementsByTagName("Personnes")
    print( len(lPersonnes) ) ## imprime le nb de noeuds "Personnes" trouvés
    Michaël Mary
    Consultant PLM dans une société de conseil toulousaine
    Auditeur CNAM-IPST depuis septembre 2008
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods
    mon cv et mon domaine et mon blog
    Aucune question technique par MP, svp

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Points : 93
    Points
    93
    Par défaut
    merci ,
    j'ai réussi à le calculer mais au fait ce que j'essaye de faire c'est de calculer le nombre des indices pour chaque personne et l'afficher
    exemple , le nom "durant a comme indice '1' et '2'
    tu as une idée ?

  4. #4
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut
    You're welcome.

    Tu peux faire un exemple de XML réel et comme ça on regardera ensemble l'algo. Mets ton code aussi.

    Si je prends ton exemple :
    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
    <quil>
            <personne>          
                    <nomPrenom nom="Durant" prenom="Stephan">
                            <indice nome="1" type="1"/>
                            <indice nome="2" type="
                    </nomPrenom>
            </personne>
            <personne>
                    <nomPrenom nom="d" prenom="e">
                            <indice nome="3" type="1"/>
                            <indice nome="4" type="2"/>
                    </nomPrenom>         
            </personne>       
    </quil>
    Pour Durant, tu veux faire la somme des indices ? soit obtenir 3 ?
    Michaël Mary
    Consultant PLM dans une société de conseil toulousaine
    Auditeur CNAM-IPST depuis septembre 2008
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods
    mon cv et mon domaine et mon blog
    Aucune question technique par MP, svp

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Points : 93
    Points
    93
    Par défaut
    voici l’exemple sur le quel je travaille
    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
     
     
    document = """\
    <quil>
     
        <personne>
     
            <nomPrenom nom="Durant" prenom="Stephan">
                <indice nome="1" type="1"/>
                <indice nome="2" type="2"/>
                
            </nomPrenom>
            
     
        </personne>
        
        <personne>
     
            <nomPrenom nom="Joe" prenom="nancy">
                <indice nome="3" type="1"/>
                <indice nome="4" type="2"/>
            </nomPrenom>
            
     
        </personne>
     
        
     
    </quil>
    """
     
    from xml.dom import minidom                                          
    dom = minidom.parseString(document)
     
    def getText(nodelist):
        rc = ""
        for node in nodelist:
            if node.nodeType == node.TEXT_NODE:
                rc = rc + node.data
        return rc
     
    def handleSlideshow(quil):
     
        racines = quil.getElementsByTagName("personne")
        handleSlides(racines)
     
     
     
     
     
    def handleSlides(racines):
        for personne in racines:
            handleSlide(personne)
     
    def handleSlide(personne):
        handleNom(personne.getElementsByTagName("nomPrenom")[0])
        handlePrenom(personne.getElementsByTagName("nomPrenom")[0])
        handleIndice(personne.getElementsByTagName("indice")[0])
        handleIndice(personne.getElementsByTagName("indice")[1])
     
     
     
     
    def handleNom(nom):
        #print  "nom : "+getText(nom.childNodes)
        print  "nom : "+ nom.getAttribute("nom")
     
     
    def handlePrenom(prenom):
        print  "prenom : "+ prenom.getAttribute("prenom")
     
     
     
    def handleIndice(indice):
        print  "indice : "+ indice.getAttribute("nome")
     
     
     
     
     
    handleSlideshow(dom)
     
    lNom = dom.getElementsByTagName("nomPrenom")
    print"le nombre neoud des noms de personnes = ",( len(lNom) )
     
    lIndice = dom.getElementsByTagName("indice")
    print"le nombre neoud des indices des personnes = ",( len(lIndice) )
    je voudrais afficher le premier nom avec ses indices en les calculant bien sur
    et pareil pour le 2eme nom

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Points : 93
    Points
    93
    Par défaut
    je veux qu'il affiche durant avec les indices 1 et 2 puis Joe avec les indices 3 et 4
    il calcule d'abord pour durant et quand il termine de ses indices il passe au nom suivant qui est joe
    il s'agit pas de calculer la somme mais la valeur de chaque indice

  7. #7
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut
    Si tu fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    def handleIndices(personne):
            lIndicePersonne = []
            for ind in personne.getElementsByTagName("indice"):
                    lIndicePersonne.append(int(ind.attributes["nome"].value))
            return lIndicePersonne
    Tu obtiens pour le nœud personne donné en paramètre, tu obtiens les indices associés.

    EDIT: Tu veux juste associer le nom avec les indices.
    j'ai édité mon code

    RE-EDIT : mode boulet... correction du code
    Michaël Mary
    Consultant PLM dans une société de conseil toulousaine
    Auditeur CNAM-IPST depuis septembre 2008
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods
    mon cv et mon domaine et mon blog
    Aucune question technique par MP, svp

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Points : 93
    Points
    93
    Par défaut
    peut être je me suis mal exprimé je veux pas la somme je veux les valeurs des indices .
    je t'explique :
    pour durant il va afficher le nombre des indices qui est 2 puis les valeurs de ses indices qui sont 1 et 2
    puis il passe à Joe et il affiche aussi le nom Joe avec le nombre 2 aussi et les valeurs de ses indices 3 et 4
    nom = durant , nb indice =2 valeurs indice 1 et 2
    nom = Joe , nb indice = 2 , valeurs indices 3 et 4

  9. #9
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut
    OK. Ca y est. J'ai compris ce que tu voulais !

    Algo:
    Pour chaque personne:
    Afficher Personne.Nom + nb_indice(Personne) + listeIndice

    Tu confirmes ? Si oui, tu peux utiliser la fonction de mon dernier message mis à jour (voir EDIT).
    Michaël Mary
    Consultant PLM dans une société de conseil toulousaine
    Auditeur CNAM-IPST depuis septembre 2008
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods
    mon cv et mon domaine et mon blog
    Aucune question technique par MP, svp

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Points : 93
    Points
    93
    Par défaut
    oui c'est ce que je veux exactement

  11. #11
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut
    Donc tu devrais t'en tirer avec la fonction que je t'ai donnée . Tu penses t'en sortir ?
    Michaël Mary
    Consultant PLM dans une société de conseil toulousaine
    Auditeur CNAM-IPST depuis septembre 2008
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods
    mon cv et mon domaine et mon blog
    Aucune question technique par MP, svp

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Points : 93
    Points
    93
    Par défaut
    je l'ai fait mais il m'affiche ce message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Element instance has no attribute 'getattr'

  13. #13
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut
    J'avais fait une coquille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    def handleIndices(personne):
            lIndicePersonne = []
            for ind in personne.getElementsByTagName("indice"):
                    lIndicePersonne.append(int (ind.attributes["nome"].value) )
            return lIndicePersonne
    Tu comprends l'esprit ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Je cherche toutes les personnes
    Pour chaque personne:
         Pour chaque indice pour cette personne     
              Ajouter à la liste la valeur de l'attribut nom de l'indice
    Michaël Mary
    Consultant PLM dans une société de conseil toulousaine
    Auditeur CNAM-IPST depuis septembre 2008
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods
    mon cv et mon domaine et mon blog
    Aucune question technique par MP, svp

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Points : 93
    Points
    93
    Par défaut
    oui je comprends , je vais essayer de le faire tourner
    merci à toi

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Points : 93
    Points
    93
    Par défaut
    encore un message d'erreur : lIndicePersonne.append(int (ind.attributes["nome"]) )
    AttributeError: Attr instance has no attribute '__trunc__'

  16. #16
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut
    De rien. Si c'est OK, pense au tag
    Michaël Mary
    Consultant PLM dans une société de conseil toulousaine
    Auditeur CNAM-IPST depuis septembre 2008
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods
    mon cv et mon domaine et mon blog
    Aucune question technique par MP, svp

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Points : 93
    Points
    93
    Par défaut
    j'ai corrigé l'erreur mais pour les résultats il n'affiche rien de plus de ce que j'avais avant

  18. #18
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut
    Citation Envoyé par nancy maman Voir le message
    j'ai corrigé l'erreur mais pour les résultats il n'affiche rien de plus de ce que j'avais avant
    Voilà ce que tu me demandais :
    nom = durant , nb indice =2 valeurs indice 1 et 2
    nom = Joe , nb indice = 2 , valeurs indices 3 et 4
    Avec ma fonction,

    Pour chaque personne ==> handlePersonne
    une fois que tu as récupéré ta liste de personne, tu récupères le nom avec handleNom(personne).
    Puis, tu appelles ma méthode.
    tu récupères une liste de valeurs d'attributs de chaque indice de personne.

    Depuis cette liste et avec ton élément personne tu peux construire ta chaîne:

    str = "Nom = "+nomPersonne+" , nb_indice = "+len(listeIndices)+" valeurs indices ", listeIndices

    EDIT: Pour afficher ta liste en string, crée toi une petite méthode (Merci google):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    def liste2string(liste, blacklist=[""]):
         the_return = ""
         for e in liste:
             if e not in blacklist:
                 the_return += e+" "
         return(the_return)
    Tu obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str = "Nom = "+nomPersonne+" , nb_indice = "+str(len(listeIndices))+" valeurs indices "+ liste2string(listeIndices)
    Michaël Mary
    Consultant PLM dans une société de conseil toulousaine
    Auditeur CNAM-IPST depuis septembre 2008
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods
    mon cv et mon domaine et mon blog
    Aucune question technique par MP, svp

Discussions similaires

  1. Compter le nombre de lignes d'un fichier ?
    Par [ZiP] dans le forum Delphi
    Réponses: 5
    Dernier message: 22/03/2007, 15h08
  2. Compter le nombre de lignes d'un fichier excel
    Par Freerideuse dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/07/2006, 22h49
  3. Réponses: 2
    Dernier message: 23/05/2006, 19h45
  4. compter le nombre de fois qu'un fichier a été chargé
    Par phpaide dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 23/05/2006, 18h51
  5. Réponses: 2
    Dernier message: 02/03/2004, 20h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo