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 :

problème pour parser fichier xml


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 28
    Par défaut problème pour parser fichier xml
    bonjour je sollicite encore votre aide afin que vous puissiez m'aider
    j'ai écrit un petit script afin de pouvoir parser un petit fichier xml mais quand je lance l’interpréteur aucune erreur mais rien ne s'affiche
    fichier xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?xml version="1.0" encoding="UTF-8"?>
        <measData>
            <measInfo measInfoId="50331655">
                <granPeriod duration="3600S" endTime="00:00-00:00"/>
                <repPeriod duration="3600S"/>
                <measTypes>503325734 5033257485 5034452574 5078342575 5034542635 5037842636 </measTypes>
                <measValue measObjLdn="ULGROUP:UL BB Resource Group No.=0">
                    <measResults>51452 4742.45 256 6484 00 000 </measResults>
                </measValue>
            </measInfo>
    code python
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    # -*- coding: utf-8 -*-
     
    from lxml import etree
    import lxml
     
    tree = "C:\\Users\\HP PRO\\Desktop\\fahd.xml"
    arbre = etree.parse(tree)
    racine = arbre.getroot()
    for noeud in arbre.xpath('//measData/measInfo'):
        for measValue in noeud.iter('measValue'):
            valeur = measValue.get('measValue')
            print('valeur:{}'.format(valeur))
    je ne sais pas réellement ou se trouve le problème si c'est au niveau du chemin ou d'un autre élément
    merci d'avance pour votre aide

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Juin 2012
    Messages
    877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 877
    Par défaut
    Bonjour,

    Je me permets de répondre sans être expert loin de là.

    Une bonne pratique est de printer un maximum de choses pour constater un comportement, un dysfonctionnement.

    Essayes de faire des print dans tes boucles for et de vérifier les types que tu reçois.

    Tu trouveras certainement la solution ou les membres du forum auront plus d'entrain à t'aider.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 28
    Par défaut
    vraiment merci beaucoup pour la réponse en faisant comme vous me l'avez conseillé je me rend compte que la première boucle for n'est pas parcourue
    je ne sais pas si le problème se trouve au niveau de la syntaxe ou d'autre chose

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par force_tranquille Voir le message
    je me rend compte que la première boucle for n'est pas parcourue
    je ne sais pas si le problème se trouve au niveau de la syntaxe ou d'autre chose
    Si la boucle "for" ne fait aucune itération, c'est que arbre.xpath('//measData/measInfo') retourne une liste vide.
    Côté Python, la syntaxe est bonne et la chaîne de caractères '//measData/measInfo' bien formée.
    Par contre, si çà ne trouve rien, c'est qu'il n'y a rien à trouver ou que l'expression XPath est "incorrecte" pour cherchez ce que vous voulez (mais çà c'est pas du Python... mais la syntaxe XPATH revue et corrigée par lxml).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 28
    Par défaut
    je vois je comprend mieux wiztricks
    cependant à partir de mon code pourriez vous me proposer un bon chemin xml car je lis la documentation dessus depuis trois jours
    mais bon j'identifie les nœuds pères fils tout mais bon je ne me retrouve toujours pas

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par force_tranquille Voir le message
    cependant à partir de mon code pourriez vous me proposer un bon chemin xml car je lis la documentation dessus depuis trois jours
    Vous n'avez pas posté un fichier XML mais un extrait qui vous arrangeait pour illustrer votre soucis.... Et vu le découpage que vous avez fait, difficile d'en connaître la structure pour savoir ce que pourrait être un bon chemin.
    Mais en fait on s'en fout un peu, une chaîne de caractères comme '<a><b>1</b><b>2</b></a>' ferait aussi bien l'affaire (pourvu qu'elle traduise la structure du fichier initial). Après je ne vois pas l'intérêt d'utiliser lxml, xml.etree.ElementTree suffit largement (mais la syntaxe est différente)...
    Ceci dit dans tous les cas, çà commence par lancer la console Python et tester ses "patterns"...
    Pour arriver à obtenir ce qu'on veut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> import xml.etree.ElementTree as et
    >>> s = '<a><b>1</b><b>2</b></a>'
    >>> tree = et.fromstring(s)
    >>> for x in tree.iter('b'): print (x.text)
    ...
    1
    2
    >>>
    note: ne croyez pas que j'y sois arrivé du premier coup: je ne connais pas cette syntaxe là par coeur!

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 28
    Par défaut
    merci encore wiztricks
    en effet j'ai pris une partie de mon fichier xml en guise d'exemple car pour le reste du fichier il se présente sous cette forme
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <measCollecFile xmlns="http://latest/nmc-omc/cmNrm.doc#measCollec" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://latest/nmc-omc/cmNrm.doc#measCollec schema\pmResultSchedule.xsd">
        <fileHeader fileFormatVersion="32.435 V7.2" vendorName="">
            <fileSender elementType=""/>
            <measCollec beginTime="2018-06-05T08:00:00-00:00"/>
        </fileHeader> 
        <measData>
            <managedElement userLabel=""/>
            <measInfo measInfoId="50331655">
                <granPeriod duration="PT3600S" endTime="2018-06-05T09:00:00-00:00"/>
                <repPeriod duration="PT3600S"/>
                <measTypes>50332573 50332574 50342574 50342575 50342635 50342636 </measTypes>
                <measValue measObjLdn="ULGROUP:UL BB Resource Group No.=0">
                    <measResults>512 42.45 26 64 0 0 </measResults>
                </measValue>
            </measInfo>
            <measInfo measInfoId="50331656">
                <granPeriod duration="PT3600S" endTime="2018-06-05T09:00:00-00:00"/>
                <repPeriod duration="PT3600S"/>
                <measTypes>5033522582 5100332583 5035232584 503332586 5034258284 5056342585 5020342586 5530342587 50342652006 5035442607 5038242608 5035242609 5035342632 5034022633 </measTypes>
                <measValue measObjLdn="BRD:Board Type=BBP, Cabinet No.=0, Subrack No.=0, Slot No.=2">
                    <measResults>0 0 0 0 0 0 0 0 0 0 0 0 0 0 </measResults>
                </measValue>
                <measValue measObjLdn="/BRD:Board Type=BBP, Cabinet No.=0, Subrack No.=0, Slot No.=3">
                    <measResults>76008 5102 32.33003 402.45 204 440 206 640 30 07 04 800 0 0 </measResults>
                </measValue>
            </measInfo>
        </measData>
        <!--<fileFooter>
            <measCollec endTime="T09:00:00-00:00"/>
        </fileFooter>
    </measCollecFile>-->
    ainsi donc vous pourriez certainement mieux comprendre mon problème
    cependant je vais tester la methode que vous m'avez proposer au détriment de la librairie lxml
    c

  8. #8
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Poue aller directement aux résultats, on peut faire comma ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for noeud in arbre.xpath('/measData/measInfo/measValue/measResults'):
    	valeur = noeud.text
    	print('valeur:{}'.format(valeur))
    si c'est "51452 4742.45 256 6484 00 000 " etc qu'on veut trouver. On peut raccourcir le xpath, mais la forme montrée est la base.

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 28
    Par défaut
    merci beaucoup pour votre réponse
    en effet normalement l'on devrait avoir l'information à partir de votre syntaxe mais malheureusement la liste retournée à partir du xpath est vide comme le signifiais wiztricks
    ce qui fais que lorsque l'on exécute on a toujours rien comme solution
    mais depuis je cherche je ne comprend pas pourquoi la liste est vide

  10. #10
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Je me fais comme repère le xml dans le premier poste, je n'ai pas regardé les modifications entre temps. Mais, ce serait essentiellement le même sauf que vous devrez regarder l'impact de namespace (ce sont des ingrédients standards, il faut le faire).

  11. #11
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    J'ai regardé le dernier mis à jour du xml (qu'il y a quelques typos dedans, d'ailleurs) avec l'utilisation de namespace (en forme de défaut dans le xml), on peut faire comme ça.
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for noeud in arbre.xpath('/ns:measCollecFile/ns:measData/ns:measInfo/ns:measValue/ns:measResults',
    	namespaces={'ns': 'http://latest/nmc-omc/cmNrm.doc#measCollec'}):
    	valeur = noeud.text
    	print('valeur:{}'.format(valeur))

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 28
    Par défaut
    vraiment merci beaucoup tsuji
    depuis près d'une semaine que je cherche maintenant j'ai des résultats qui s'affichent
    le code passe je pourrai maintenant faire des recherches spécifiques

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Aide pour parser fichier XML
    Par kinder540 dans le forum Général Python
    Réponses: 9
    Dernier message: 08/01/2014, 16h13
  2. Réponses: 1
    Dernier message: 12/02/2013, 00h23
  3. Problème pour parser un XML
    Par Aspic dans le forum VB.NET
    Réponses: 3
    Dernier message: 22/01/2008, 20h05
  4. [encoding] Problème pour les fichiers XML avec notepad
    Par lehamster dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 21/11/2006, 15h56
  5. problème pour parser un fichier xml avec XML::Simple
    Par black_code dans le forum Modules
    Réponses: 3
    Dernier message: 30/01/2006, 19h32

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