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 :

Comment modifier le contenu d'un noeud de type texte avec python?


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 14
    Par défaut Comment modifier le contenu d'un noeud de type texte avec python?
    Bonjour,

    Voilà mon problème j'ai un fichier xml où j'enregistre la configuration de mon application du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?xml version="1.0"?>
    <root>
    	<config>
    		<mode>auto</mode>
                    <langue>francais<langue>
    	</config>
    </root>
    La configuration peut changer au cours du temps puisque l'utilisateur à plein pouvoir dessus.
    J'aimerais modifier le texte du noeud mode. Comment puis-je faire ?
    Pour infos, je lis le contenu du fichier xml avec minidom mais je n'ai pas trouvé pour modifier le contenu d'un noeud.

    Merci d'avance à vous.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Salut,

    Et avec MicroTom?

    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
    import re
     
    ch = '''<?xml version="1.0"?>
    <root>
            <config>
                    <mode>auto</mode>
                    <langue>francais<langue>
            </config>
    </root>
     '''
    print ch
     
    RE = '\s+<config>\r?\n\s+<mode>([^<]+)</mode>\r?\n(\s+.+\r?\n)*\s+</config>'
    x,y = re.search(RE,ch).span(1)
     
    chtr = ch[0:x] + raw_input('Entrer la modif : ') + ch[y:]
    print '\n'+chtr

  3. #3
    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
    Citation Envoyé par Tinkite82 Voir le message
    J'aimerais modifier le texte du noeud mode. Comment puis-je faire ?
    Je ne sais pas s'il existe une méthode en apparence directe. Pour ma part, j'aurais tendance à lire le contenu du fichier XML, à en faire une copie avec les modifications souhaitées, et enfin à effacer l'ancien fichier.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 14
    Par défaut
    Merci de vos réponses.
    Les possibilités que vous donnez sont faisables mais je voudrais une méthode directe je cherche en faite la bonne api pour faire ça.
    Tu parlais de MicroTom je ne vois pas ce que c'est ?(pour info en tapant "MicroTom python" tu es le premier sur google avec ta réponse lol)

    Personne ne connaît donc cette fameuse api ?

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    MicroTom: c’est une blague pour helléniste derrière laquelle il y a:

    - l’opposition mini / micro
    Mini, même si petit, étant plus gros que micro.
    Les regex ne sont pas plus difficiles à mettre en œuvre, à mon avis, que minidom ou autre logiciel ’fait pour’ mais qui se révèlent tout aussi complexes et longs à maîtriser que les regex.

    - remplacer un morceau de chaîne comme je l’ai fait dans mon code, c’est découper une tranche:
    googlise donc “microtome“....


    EDIT:
    helléniste et non pas héléniste

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 14
    Par défaut
    Ok j'avais pas compris, je suis pas un spécialiste de la civilisation grec.
    Oui bon je crois que je vais faire un truc "beta" qui efface tout et réécrit tout la configuration dans le fichier xml lors d'un changement si il y a pas d'autre solution.

    Merci à vous

  7. #7
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    Bonjour,

    un exemple avec ElementTree,

    prenons le fichier exemple.xml suivant:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0"?>
    <root>
        <config>
            <mode>auto</mode>
            <langue>francais</langue>
         </config>
    </root>
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from xml.etree import ElementTree as ET
     
    tree = ET.parse('exemple.xml')
     
    root = tree.getroot()
    mode = root.find('config/mode')
    mode.text = 'manuel'
     
    tree.write('exemple.xml')
     
    print open('exemple.xml').read()
    On obtient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <root>
        <config>
            <mode>manuel</mode>
            <langue>francais</langue>
        </config>
    </root>
    Bon python

Discussions similaires

  1. [SimpleXML] Modifier le contenu d'un noeud
    Par michael_MS dans le forum Bibliothèques et frameworks
    Réponses: 17
    Dernier message: 16/10/2008, 15h24
  2. [SimpleXML] Modifier le contenu d'un noeud
    Par Scalp4 dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 02/10/2008, 14h59
  3. [XSLT] comment recopier le contenu d'un noeud sans ses fils
    Par st0ne dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 13/09/2007, 11h05
  4. Comment Modifier le contenu de @INC ?
    Par lfa44 dans le forum Langage
    Réponses: 2
    Dernier message: 11/09/2007, 20h55

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