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 :

Ajouter un noeud dans un fichier XML


Sujet :

Python

  1. #1
    Membre chevronné

    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
    Points : 1 752
    Points
    1 752
    Par défaut Ajouter un noeud dans un fichier XML
    Bonjour,
    je voudrais passer du fichier XML ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?>
    <knuth>
        <number value="1">
        </number>
    </knuth>
    au fichier suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?>
    <knuth>
        <number value="1">
            <number value="2">
            </number>
        </number>
    </knuth>
    J'aimerais utiliser xml.etree par exemple. L'idée est d'ajouter un noeud pour une valeur value connue.

    Toute info. est la bienvenue.

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

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

    Tu peux faire:
    Code : 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
    xml = """<?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?>
    <knuth>
        <number value="1">
        </number>
    </knuth>"""
    
    tree = ET.fromstring(xml)
    ET.SubElement(tree.find('number'), 'number', value="2")
    print ET.tostring(tree)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <knuth>
        <number value="1">
        <number value="2" /></number>
    </knuth>
    C'est un exemple minimale, si tu veux pouvoir faire une sélection sur un attribut, utilise getiterator et tester les valeurs de value, je n'ai pas vu de méthode pour rechercher directement une balise par ses attributs dans la doc.
    "Etre conscient de la difficulté permet de l'éviter.."
    Lao-Tseu.

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

    Je n'ai pas compris ce que vous faites mais pour vous titiller dans le sens "arrêtez d'utiliser du XML pour ce que ce n'est pas"...

    Je me suis permis d'écrire votre arbre XML sous la forme d'un dict de dict
    Et pour trouver tous les chemins qui mènent à 12, show_paths taille l'arbre (pruning) à coup de yield

    Code Python : 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
     
    d = { 1: { 2 : { 4 : { 8:{ 12: {}, 16:{}}},3:{5:{},6:{9:{},12:{}}}}}}
     
    def show_paths(tree, number):
        if len(tree):
            for value in tree.keys():
                if value == number:
                    yield [ value ]
                elif value < number:
                    for l in show_paths(tree[value], number):
                        yield [ value ] + l
                else:
                    pass
     
     
    for l in show_paths(d, 12):
        print l
    print 'done'

    Je sais que ce n'est pas ce que vous voulez
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre chevronné

    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
    Points : 1 752
    Points
    1 752
    Par défaut
    Citation Envoyé par pacificator Voir le message
    C'est un exemple minimale, si tu veux pouvoir faire une sélection sur un attribut, utilise getiterator et tester les valeurs de value, je n'ai pas vu de méthode pour rechercher directement une balise par ses attributs dans la doc.
    Je vais me renseigner et je posterais ici si je trouve.

    Citation Envoyé par wiztricks Voir le message
    Je n'ai pas compris ce que vous faites mais pour vous titiller dans le sens "arrêtez d'utiliser du XML pour ce que ce n'est pas"...
    J'ai envie d'essayer cette méthode. Ceci me permet de voir comment travailler avec du XML dans un cadre simple.

    Citation Envoyé par wiztricks Voir le message
    Je me suis permis d'écrire votre arbre XML sous la forme d'un dict de dict
    Et pour trouver tous les chemins qui mènent à 12, show_paths taille l'arbre (pruning) à coup de yield
    Je sais que ce n'est pas ce que vous voulez
    Pas mal comme méthode, je vais essayer aussi d'implémenter mon arbre de cette façon. Merci.

  5. #5
    Membre chevronné

    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
    Points : 1 752
    Points
    1 752
    Par défaut
    Voilà ce que j'ai pu faire :
    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
    #! /usr/bin/env python
     
    # Sources
    #    http://www.doughellmann.com/PyMOTW/xml/etree/ElementTree/create.html
    #    http://effbot.org/zone/element.htm
     
    import xml.etree.ElementTree as etree
     
    my_xml = """<?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?>
    <knuth>
        <number value="1">
            <number value="2">
                <number value="3">
                </number>
                <number value="4">
                </number>
            </number>
        </number>
    </knuth>"""
     
    root = etree.fromstring(my_xml)
     
    def findLastChild(node):
        answer = False
        for child in node:
            answer = True
     
            if not findLastChild(child):
                child = etree.SubElement(child, 'newNode')
                child.attrib['attribut'] = "value"
     
        return answer
     
    findLastChild(root)
     
    print(etree.tostring(root))
    On obtient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <knuth>
        <number value="1">
            <number value="2">
                <number value="3">
                    <newNode attribut="value" />
                </number>
                <number value="4">
                    <newNode attribut="value" />
                </number>
            </number>
        </number>
    </knuth>
    La méthode ci-dessus peut être affinée pour s'arrêter aux attributs que l'on souhaite sans aucun souci.

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

Discussions similaires

  1. Ajouter des noeud dans un fichier XML
    Par chinoismasque dans le forum Windows Phone
    Réponses: 4
    Dernier message: 02/08/2011, 16h32
  2. [JDOM] ajout d'un noeud dans un fichier xml en java
    Par sampaiX dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 22/04/2010, 17h53
  3. Récupérer les valeurs d'un noeud dans un fichier XML
    Par yosthegost dans le forum Delphi
    Réponses: 1
    Dernier message: 30/05/2006, 17h38
  4. [VB.NET] [XML] Suppression d'un noeud dans un fichier XML
    Par Hoegaarden dans le forum Windows Forms
    Réponses: 2
    Dernier message: 24/09/2004, 11h24

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