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 :

débutant parsing de XML


Sujet :

Python

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Par défaut débutant parsing de XML
    Bonjour à tous

    Je travaille en python 3.3 et j'ai grand besoin d'un coup de main !

    Je récupère dans un traitement un bout de XML et je dois en extraire des données.


    Exemple de XML :
    <?xml version=1.0" ?><t><h t="Link/Namespace Attribute Content" u=""><d n="id" t="long"/><d n="scopeId" t="long"/><d n="type" t="String"/><d n="name" t="String"/><d n="no" t="long"/><d n="qual" t="String"/><d n="language" t="String"/></h><r><c>9117</c><c>0</c><c>NAM/SERVICE</c><c>DSC</c><c>1</c></r><r><c>9122</c><c>0</c><c>NAM/SERVICE</c><c>Gestions</c><c>1</c></r><r><c>9550</c><c>0</c><c>NAM/SERVICE</c><c>Juridique</c><c>1</c></r><r><c>16443</c><c>0</c><c>NAM/SERVICE</c><c>Ingénierie Produit</c><c>1</c></r></t>"
    Résultat attendu : une chaine de caractères "DSC,Gestions,Juridique,Ingénierie Produit"


    J'ai donc commencé par essayer de parser mon XML ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def parseXML(file):
        xml_file_handle = open(file,'r')
        xml_as_string = xml_file_handle.read()
        xml_file_handle.close()
     
        xml_cleaned = re.sub(u'[^\n\r\t\x20-\x7f]+',u'',xml_as_string)
        root = ET.fromstring(xml_cleaned)
    Ca ne fonctionne pas parce que mon XML est "not well-formed"
    Il y a des quotes à des endroits bizarres.

    Je change de stratégie et j'essaye des regexeps.
    J'arrive à quelque chose ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def findInXML(file):
        xml_file_handle = open(file,'r')
        xml_as_string = xml_file_handle.read()
     
        m = re.search(r'(.*)<c>NAM(.*)</c><c>(.*)</c><c>(.*)</c>',xml_as_string)
        if m:
            print(m.group(3))
     
        else:
            print('No Match !')
    Manque de bol, ça ne récupère qu'une des occurences et non pas toutes.

    Après un tour dans la doc, je tente avec findall()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def findInXML2(file):
        xml_file_handle = open(file,'r')
        xml_as_string = xml_file_handle.read()
     
        p = re.compile(r'<c>NAM/SERVICE</c><c>(.*)</c><c>[0-9]</c><c>')
        result = p.findall(xml_as_string)
        print(result[0])
    Là ça ne marche pas du tout, la regexp me ressort tout le fichier...
    Est-ce que vous sauriez comment
    • Faire le parsing d'un XML "not well-formed"
    • Utiliser findall() pour enfin arriver à mes fins ?
    • Une autre méthode plus adaptée ?



    En pièce jointe le XML d'exemple.
    Je vous remercie !





    le code complet
    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
    #!/usr/bin/env python3
    # -*- coding: iso-8859-15 -*-
    # tested with python 3.3
     
    import xml.etree.ElementTree as ET
    import re
     
    def main():
        file = 'exemple 2.xml'
        findInXML2(file)
     
    def findInXML2(file):
        xml_file_handle = open(file,'r')
        xml_as_string = xml_file_handle.read()
     
        p = re.compile(r'<c>NAM/SERVICE</c><c>(.*)</c><c>[0-9]</c><c>')
        result = p.findall(xml_as_string)
        print(result[0])
     
     
     
    def findInXML(file):
        # ...
        #<c>0</c>
        #<c>NAM/SERVICE</c>
        #<c>DSC</c>
        #<c>1</c>
        # ...
        #<c>0</c>
        #<c>NAM/SERVICE</c>
        #<c>Gestions</c>
        #<c>1</c>
        #...
        #find = 'NAM/SERVICE'
        #return 'DSC,Gestions,Juridique'
        xml_file_handle = open(file,'r')
        xml_as_string = xml_file_handle.read()
     
        m = re.search(r'(.*)<c>NAM(.*)</c><c>(.*)</c><c>(.*)</c>',xml_as_string)
        if m:
            print(m.group(3))
     
        else:
            print('No Match !')
     
     
     
    def parseXML(file):
        #ne fonctionne "XML declaration not well-formed"
        xml_file_handle = open(file,'r')
        xml_as_string = xml_file_handle.read()
        xml_file_handle.close()
     
        xml_cleaned = re.sub(u'[^\n\r\t\x20-\x7f]+',u'',xml_as_string)
        root = ET.fromstring(xml_cleaned)
     
    if __name__ == "__main__":
        main()
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Débutant parsing fichier XML
    Par jameson dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 28/11/2010, 17h26
  2. [ Tomcat ] [ débutant ] config web.xml
    Par TeTram dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 09/02/2009, 10h22
  3. [Choix] [Débutant] SOAP ou XML-RPC ?
    Par Noisette dans le forum XML/XSL et SOAP
    Réponses: 7
    Dernier message: 15/01/2009, 17h31
  4. [débutant] interet de XML
    Par unNew dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 09/09/2005, 09h48
  5. [débutant] faire du xml...
    Par Mathusalem dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 24/03/2005, 11h39

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