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 :

[XML] comment récuperer le contenu des balises


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Mai 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 7
    Par défaut [XML] comment récuperer le contenu des balises
    Bonjour étant un novice en matiere de langage python je me permet de vous demander conseille par rapport a un de mes exerices :

    Le but de cet exercice est d'extraire le contenu de differentes balises et de stocker tous cela dans un tableau pour etre réutiliser:

    <Profil>
    <Nom>1092</Nom>
    <Age>40</Age>
    <Type>1</Type>
    <Date>1998-01-23</Date>
    <Pays>France</Pays>
    </Profil>


    apres avoir regarder sur le forum j'ai trouver differents moyen de "transformer " ce fichier XML ( minimob ,ElementTree, etc...) et donc je voulais avoir votre avis sur la solutions qui correspondrai le mieux avec mon probleme ?

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Par défaut
    Bonjour,

    Personnellement j'utilise minidom pour faire ce genre de chose.
    Voici un exemple tout simple pour récupérer les données dans un dictionnaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    from xml.dom.minidom import parse
     
    dom = parse('file.xml')
    root = dom.documentElement
    dictXml = {}
    for node in root.childNodes:
        if node.nodeType != node.TEXT_NODE:
            name = node.nodeName
            value = node.firstChild.nodeValue
            dictXml[name] = value
     
     
    print dictXml

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    ElementTree c'est bien aussi et c'est plus "pythonique" je trouve:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> from xml.etree.ElementTree import ElementTree
    >>> tree = ElementTree(file=open("file.xml"))
    >>> [child.text for child in tree.getroot()]
    ['1092', '40', '1', '1998-01-23', 'France']
    >>> dict((e.tag, e.text) for e in tree.getroot())
    {'Date': '1998-01-23', 'Nom': '1092', 'Age': '40', 'Type': '1', 'Pays': 'France'}
    [OT] "minimob" c'est mignon [/OT]

  4. #4
    Membre du Club
    Inscrit en
    Mai 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 7
    Par défaut
    j'ai éssayer vos deux solutions elle fonctionne parfaitement pour mon premier probleme, mais j'ai fait une petit erreur d'explication:

    en faite je récupère une liste de profil au format xml que je doit classer comme précédemment, mais je ne connais pas le contenu des balises (Nom,Age,Type,Date,Pays) et il y a plus de balise 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
     
    <?xml version="1.0" standalone="yes"?>
    <Classe>
      <Profil>
        <Nom>1092</Nom>
        <Age>40</Age>
        <Type>1</Type>
        <Date>1998-01-23</Date>
        <Pays>France</Pays>
      </Profil>
      <Profil>
        <Nom>1092</Nom>
        <Age>40</Age>
        <Type>1</Type>
        <Date>1998-01-23</Date>
        <Pays>France</Pays>
      </Profil>
      <Profil>
          .
          .
          .
          .
      </Profil>
    </Classe>
    désoler pour cette petite erreur
    et merci pour la petite correction de "minimob".

  5. #5
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Bonjour,
    tu peux jeter un oeil ici pour un exemple simple de noeuds imbriqués.

  6. #6
    Membre du Club
    Inscrit en
    Mai 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 7
    Par défaut
    merci beaucoup , apparement j'avais pas assez cherché.

    bonne continuation

  7. #7
    Membre du Club
    Inscrit en
    Mai 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 7
    Par défaut
    merci pour le lien mais celui ci traite plutot des recherche de nombre mais dans mon cas les balises peuvent contenir du texte , je ne sais pas si cela fonctionne de la meme façon deplus je ne connais pas d'avance les valeurs entre les differentes balises ??

  8. #8
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Il faut chercher un peu... Voici un début de piste. J'espère que je ne suis pas en train de résoudre un problème donné par un prof...
    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
    #! /usr/bin/env python
    #coding=utf-8
     
    import xml.etree.ElementTree as etree
    tree = etree.parse('xml_doc.xml')
    root = tree.getroot()
     
    def findText(node):
        for child in node:
            print'TAG : '+ child.tag
            if child.text.strip():
                print('TEXT : ' + child.text.strip())
            findText(child)
     
    findText(root)
    xml_doc.xml est le nom donné au fichier xml.

    La méthode ci-dessus ne fonctionne pas si le texte contient un caractère non ascii.

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

Discussions similaires

  1. modifier le contenu des balises d'un document XML
    Par habsbu dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 19/06/2011, 09h52
  2. [XSLT] lire le contenu des balises en xml dans un ordre précis
    Par ajax12 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 08/04/2010, 18h47
  3. XML contenu des balises pour des images
    Par boitalette dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 18/10/2009, 18h36
  4. Extraire le contenu des balises XML
    Par calimero2611 dans le forum Modules
    Réponses: 7
    Dernier message: 12/06/2006, 15h09
  5. [Balise XML] Comment récupérer le contenu entre 2 balise?
    Par ZoumZoumMan dans le forum C++Builder
    Réponses: 5
    Dernier message: 05/03/2004, 16h36

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