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 :

Aide pour parser fichier XML


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 45
    Points : 33
    Points
    33
    Par défaut Aide pour parser fichier XML
    Bonjour tout le monde,

    Je me sens obligé de vous demandez de l'aide, voilà maintenant 6 heures que je ne sais pas comment me sortir de cette impasse

    Je dois parser un fichier 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
    <?xml version="1.0" encoding="UTF-8"?>
    <Topologies>
        <Topology name="Serveur">
            <ConfigurationItems>
                <ConfigurationItem ID="hguytuytu" Label="yuyu" Type="unix">
                    <Attribute Name="DomainName" Label="DomainName" Type="class java.lang.String" Value="mtfgf" />
                    <ConfigurationItem ID="huikghjgh" Label="Intel(R)" Type="cpu">
                        <Attribute Name="Core number" Label="Core number" Type="cldfgg" Value="" />
                    </ConfigurationItem>
                    <ConfigurationItem ID="dfgdfgdg" Label="Production" Type="fgdgdfg">
                        <Attribute Name="ddfgl" Label="Didfgbel" Type="cdfgdfg" Value="fdgdfg" />
                    </ConfigurationItem>
    	    </ConfigurationItem>
    	 </ConfigurationItems/>
         </Topology>
    </Topologies>
    Le problème c'est que je n'ai jamais fait de python, alors j'ai fait beaucoup de recherches, j'ai entendu parler de DOM et aussi lxml, le problème c'est que dans mon XML que je ne peux pas modifier, j'ai "configurationItem" qui est le parent des "attribute", mais j'ai aussi d'autre "configurationItem" mais qui eux aussi sont fils du "configurationItem" parent, je ne sais pas si je me fais bien comprendre...

    En gros j'aimerais récupérer tous les attributs de chaque éléments.

    Si quelqu'un peut m'aider...

    Cordialement.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 338
    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 338
    Points : 36 859
    Points
    36 859
    Par défaut
    Salut,
    Pour "parser" un fichier XML, vous pouvez utiliser le module elementTree qui est inclus dans les bibliothèques standards. La documentation inclus un tutoriel qui peut vous aider a démarrer.
    Cela vous permettra d’accéder facilement aux différents éléments/valeurs du fichiers XML.

    Si vous rencontrez des difficultés, postez du code, montrez ce que vous faites: il y aura du monde pour s'empresser a vous aider.
    Pour l'instant, on ne peut que compatir mais comme ça ne vous aidera pas.... ce sera un grand silence.

    - W

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 45
    Points : 33
    Points
    33
    Par défaut
    Merci beaucoup pour le lien, je bosse ça se soir, je vous tiendrai au courant,

    Cordialement.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 45
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    Bon je commence a mieux comprendre, sauf que maudis comme je suis, y'a un truc qui m'échappe, j'ai une erreur sur une portion de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/usr/bin/python
    import xml.etree.ElementTree as ET
    rootString = "ConfigurationItem"
    tree = ET.parse('Serveurs Unix.xml')
    root = ET.fromstring(rootString)
    Donc si je comprends bien le tuto, au lieu de définir la racine directement avec la méthode getroot, je peux la définir à partir d'un string, pourtant ça ne marche pas, j'ai ça comme erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      File "scriptXML.py", line 5, in <module>
        root = ET.fromstring(rootString)
      File "/usr/lib64/python2.6/xml/etree/ElementTree.py", line 964, in XML
        return parser.close()
      File "/usr/lib64/python2.6/xml/etree/ElementTree.py", line 1254, in close
        self._parser.Parse("", 1) # end of data
    xml.parsers.expat.ExpatError: syntax error: line 1, column 0
    Voilà j'ai besoin de votre aide,

    Cordialement.

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 338
    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 338
    Points : 36 859
    Points
    36 859
    Par défaut
    Salut,

    Jouez avec ce bout de code:
    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 = '''<?xml version="1.0" encoding="UTF-8"?>
    <Topologies>
        <Topology name="Serveur">
            <ConfigurationItems>
                <ConfigurationItem ID="hguytuytu" Label="yuyu" Type="unix">
                    <Attribute Name="DomainName" Label="DomainName" Type="class java.lang.String" Value="mtfgf" />
                    <ConfigurationItem ID="huikghjgh" Label="Intel(R)" Type="cpu">
                        <Attribute Name="Core number" Label="Core number" Type="cldfgg" Value="" />
                    </ConfigurationItem>
                    <ConfigurationItem ID="dfgdfgdg" Label="Production" Type="fgdgdfg">
                        <Attribute Name="ddfgl" Label="Didfgbel" Type="cdfgdfg" Value="fdgdfg" />
                    </ConfigurationItem>
                </ConfigurationItem>
             </ConfigurationItems>
         </Topology>
    </Topologies>'''
     
    import xml.etree.ElementTree as et
     
    root = et.fromstring(XML)
    for item in root.findall(".//ConfigurationItems/ConfigurationItem"):
        print (item)
        for e in item:
            print (e.tag, e.attrib)
    e.attrib est juste un dict.
    - W

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 338
    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 338
    Points : 36 859
    Points
    36 859
    Par défaut
    Citation Envoyé par kinder540 Voir le message
    mais je ne sais pas pourquoi il me met sort une erreur, peut être que l'attribut "value" n'est pas dans tous les champs, n'y aurait-il pas une commande qui permet de faire une recherche ?
    Comment ça peut être?
    Dans le XML que vous montrez, "Value" n'est attribut que de l'element "Attribute".
    root.findall(...) fait déjà une recherche non?
    - W

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 45
    Points : 33
    Points
    33
    Par défaut
    Oui désolé je me suis mal exprimé,

    J'aimerai au fait récupérer seulement "<Attribute Name="display_label" Label="Display Label" Type="class java.lang.String" Value="fg" />" et pas les autres, si j'utilise print attribut.attrib["Label"] je vais récupérer tous les Label des attributes, j'aimerai pouvoir faire un choix, en gros dire, je veux l'attribute "Display_Label" avec sa "value" et l'attribute "Salle" avec sa "value"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <Attribute Name="display_label" Label="Display Label" Type="class java.lang.String" Value="fg" />
                        <Attribute Name="Site" Label="Site" Type="class java.lang.String" Value="fg" />
                        <Attribute Name="Salle" Label="Salle" Type="class java.lang.String" Value="D544" />
                        <Attribute Name="Rack" Label="Raid" Type="class java.lang.String" Value="D7-sd-22" />
                        <Attribute Name="Enclosure" Label="Enclosure" Type="class java.lang.String" Value="dfg-g-85-E1" />
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for topology in root:
    	for configurationitems in topology:
    		for configurationitem in configurationitems:
    			#print configurationitem.attrib["Label"]
    			for attribut in configurationitem:
    				#print attribut.attrib["Label"] 
    				print attribut.findall("@name='Sale'")
    Voila ce que j'ai fait, mais ça ne marche pas...

    Cordialement

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 338
    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 338
    Points : 36 859
    Points
    36 859
    Par défaut
    Relisez le paragraphe sur XPath et ses exemples.
    Postez un minimum de code qui réalise ce que vous attendez...
    Vous avez suffisamment de bouts pour réaliser ça.

    - W

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 45
    Points : 33
    Points
    33
    Par défaut
    Je ne sais pas quoi utiliser comme méthode (findall, findtext, find)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print attribut.findall('[@attrib="Salle"]')
    J'ai essayé comme ça, mais ca ne donne rien, de plus je n'ai pas compris la partie 20.6.2.2. Supported XPath syntax du tuto http://docs.python.org/3.3/library/x...#xpath-support

    Je ne comprends ou je suis censé placé "[@attrib='value']" par exemple...

    Cordialement...

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 338
    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 338
    Points : 36 859
    Points
    36 859
    Par défaut
    Salut,

    Si vous n'y arrivez pas via XPath, vous savez maintenant parcourir les éléments, tester les valeurs qui vous intéressent. Vous emballer le tout dans une fonction ce que vous voulez.
    Ce n'est pas ce que je ferais (mais je ne sais pas ce que vous voulez faire) mais si vous voulez apprendre essais, erreurs, changement de plan,... se battre un peu avec la machine pour obtenir ce que vous voulez même si ce n'est pas "top" est la seule façon de progresser.

    - W

Discussions similaires

  1. Aide Pour Parser XML JAVA
    Par linuxien_62 dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 23/10/2013, 14h09
  2. Réponses: 5
    Dernier message: 19/10/2008, 18h33
  3. Réponses: 1
    Dernier message: 09/10/2007, 19h31
  4. Besoin d'aide lié à un fichier xml et un tableau a charger..
    Par jjs dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/07/2005, 14h03

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