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 :

réstructurer un fichier XML avec DOM


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    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
    Par défaut réstructurer un fichier XML avec DOM
    Bonjour
    j'ai ce code1 qui me permet d’obtenir resultat1 :
    code 1:
    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
    from xml.dom import minidom
    import tempfile
    import os
     
    Station1 = ['Pentium M', '512MB']
    Station2 = ['Pentium Core 2', '1024MB']
    Station3 = ['Pentium Core Duo', '1024MB']
    StationList = [Station1, Station2, Station3]
     
    DOMimpl = minidom.getDOMImplementation()
     
    xmldoc = DOMimpl.createDocument(None,"Workstations", None)
    doc_root = xmldoc.documentElement
     
    for station in StationList:
        #Create Node
        node = xmldoc.createElement("Computer")
     
     
        element = xmldoc.createElement('Processor')
        element.appendChild(xmldoc.createTextNode(station[0]))
        node.appendChild(element)
     
        element = xmldoc.createElement('Memory')
        element.appendChild(xmldoc.createTextNode(station[1]))
        node.appendChild(element)
     
        doc_root.appendChild(node)
     
    nodeList = doc_root.childNodes
    for node in nodeList:
        print node.toprettyxml()
     
     
    file = open("stations3.xml", 'w')
    file.write(xmldoc.toxml())
    #print file.read()
    resultat1 :
    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
    <Computer>
    	<Processor>
    		Pentium M
    	</Processor>
    	<Memory>
    		512MB
    	</Memory>
    </Computer>
     
    <Computer>
    	<Processor>
    		Pentium Core 2
    	</Processor>
    	<Memory>
    		1024MB
    	</Memory>
    </Computer>
     
    <Computer>
    	<Processor>
    		Pentium Core Duo
    	</Processor>
    	<Memory>
    		1024MB
    	</Memory>
    </Computer>
    j'aimerais récrire ce code pour obtenir les résultat suivant :
    résultat souhaité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <Computers>	
    	<Computer Processor="Pentium M" Memory="512MB">
     
    	</Computer>
     
    	<Computer Processor="Pentium Core 2" Memory="1024MB">
     
    	</Computer>
     
     
    	<Computer Processor="Pentium Core Duo" Memory="1024MB">
     
    	</Computer>
    </Computers>
    merci d'avance

  2. #2
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    si tu n'as pas de texte à l'intérieur de deux balises, comme ici:
    <balise></balise>
    les parseurs les remplacent par une balise unique
    <balise/>

    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
    from xml.dom import minidom
    import tempfile
    import os
     
    Station1 = ['Pentium M', '512MB']
    Station2 = ['Pentium Core 2', '1024MB']
    Station3 = ['Pentium Core Duo', '1024MB']
    StationList = [Station1, Station2, Station3]
     
    DOMimpl = minidom.getDOMImplementation()
     
    xmldoc = DOMimpl.createDocument(None,"Workstations", None)
    doc_root = xmldoc.documentElement
     
    for station in StationList:
        #Create Node
        node = xmldoc.createElement("Computer")
        node.setAttribute('Processor', station[0])
        node.setAttribute('Memory', station[1])
        doc_root.appendChild(node)
     
    nodeList = doc_root.childNodes
    for node in nodeList:
        print node.toprettyxml()
     
     
    file = open("stations3.xml", 'w')
    file.write(xmldoc.toxml())
    #print file.read()

  3. #3
    Membre éclairé
    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
    Par défaut
    quand je test ton code il m'affiche les résultats souhaités mais sans afficher l’élément racine <Workstations> :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <Computer Memory="512MB" Processor="Pentium M"/>
     
    <Computer Memory="1024MB" Processor="Pentium Core 2"/>
     
    <Computer Memory="1024MB" Processor="Pentium Core Duo"/>
    mais quand j'ouvre mon fichier je vois que tout est écrit sur la meme ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version="1.0" ?><Workstations><Computer Memory="512MB" Processor="Pentium M"/><Computer Memory="1024MB" Processor="Pentium Core 2"/><Computer Memory="1024MB" Processor="Pentium Core Duo"/></Workstations>
    comment faire pour qu'il respecte aussi l'affichage dans le fichier et ne pas tout écrire sur la même ligne

  4. #4
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Citation Envoyé par nancy maman Voir le message
    comment faire pour qu'il respecte aussi l'affichage dans le fichier et ne pas tout écrire sur la même ligne
    Le meilleur moyen de regarder un fichier xml, c'est de le drag&droper d'un explorateur de fichier vers un navigateur web. Faire des lignes séparées n'a aucun autre intérêt que de rendre le fichier plus compréhensible pour un humain. C'est le rôle de la méthode toprettyxml() il me semble.
    Images attachées Images attachées  

  5. #5
    Membre éclairé
    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
    Par défaut
    ok
    une question , pourquoi quand je compile je vois que ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <Computer Memory="512MB" Processor="Pentium M"/>
     
    <Computer Memory="1024MB" Processor="Pentium Core 2"/>
     
    <Computer Memory="1024MB" Processor="Pentium Core Duo"/>
    la balise <Workstations> n'apparait pas quand je compile avec éclipse !!!!
    je croyais que ça devrait s’afficher comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <Workstations>
    <Computer Memory="512MB" Processor="Pentium M"/>
     
    <Computer Memory="1024MB" Processor="Pentium Core 2"/>
     
    <Computer Memory="1024MB" Processor="Pentium Core Duo"/>
    </Workstations>

  6. #6
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Citation Envoyé par nancy maman Voir le message
    pourquoi quand je compile je vois que ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <Computer Memory="512MB" Processor="Pentium M"/>
     
    <Computer Memory="1024MB" Processor="Pentium Core 2"/>
     
    <Computer Memory="1024MB" Processor="Pentium Core Duo"/>
    Je ne sais pas ce que tu veux dire par "quand je compile je vois que ca". Si tu regardes le fichier xml généré dans un navigateur web, ton code est complet. Après, ce que tu vois quand tu compiles, c'est la sortie écran que tu as programmée et qui n'est pas forcément identique au xml généré. En fait, tu n'es pas remontée à la racine du document pour lance le toprettyxml()

    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
    from xml.dom import minidom
    import tempfile
    import os
     
    StationList = [
        ['Pentium M', '512MB'],
        ['Pentium Core 2', '1024MB'],
        ['Pentium Core Duo', '1024MB']
        ]
     
    DOMimpl = minidom.getDOMImplementation()
     
    xmldoc = DOMimpl.createDocument(None,"Workstations", None)
    doc_root = xmldoc.documentElement
     
    for station in StationList:
        node = xmldoc.createElement("Computer")
        node.setAttribute('Processor', station[0])
        node.setAttribute('Memory', station[1])
        doc_root.appendChild(node)
     
    file = open("stations.xml", 'w')
    file.write(xmldoc.toxml())
    print doc_root.toprettyxml()

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

Discussions similaires

  1. Parser un fichier XML avec DOM
    Par Bayard dans le forum Général Python
    Réponses: 1
    Dernier message: 02/11/2007, 20h44
  2. parser un fichier xml avec dom
    Par cilies38 dans le forum Modules
    Réponses: 2
    Dernier message: 04/03/2007, 21h12
  3. [DOM] Php5 : créer un fichier xml avec Dom
    Par devadh dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 29/01/2007, 14h04
  4. [DOM] Comment generer ce fichier XML avec DOM ?
    Par jlassira dans le forum Format d'échange (XML, JSON...)
    Réponses: 18
    Dernier message: 10/04/2006, 09h12
  5. [DOM] [Débutant(e)] Modifier un fichier XML avec DOM
    Par macks dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 05/07/2005, 14h13

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