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 :

Suppression noeud XML en fonction d'une balise [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 90
    Par défaut Suppression noeud XML en fonction d'une balise
    Bonjour,

    je lis un fichier XML en python. Lors de la lecture si je rencontre une certaine valeur, je dois supprimer tout un nœud.

    Ex :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <Simple>
       <cle>TOTO</cle>
       <val>35</val>
    </Simple>

    Si je rencontre "TOTO", je dois supprimer tout le bloc <Simple></<Simple>.

    Une idée ?

    Merci.

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 349
    Par défaut
    Bonjour,

    Peut-être...
    Un bout de code de ce que tu as commencé à faire ?

    Quand tu dis tout le bloc, si celui-ci est aussi dans un bloc qui est aussi dans un bloc, que doit on faire ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 90
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Bonjour,

    Peut-être...
    Un bout de code de ce que tu as commencé à faire ?

    Quand tu dis tout le bloc, si celui-ci est aussi dans un bloc qui est aussi dans un bloc, que doit on faire ?
    Salut,

    merci pour ton retour. Je n'ai pas encore commencé le code. Pour le moment je réfléchis à mon algo sur le comment je vais faire et avec quels outils. De ce que j'ai listé, ma difficulté serait à ce niveau, c'est à dire supprimer un noeud. Le bloc que j'ai indiqué sera dans un autre bloc, mais il faut supprimer ou modifier uniquement ce que j'ai indiqué si la valeur entre les balises <cle></cle> est celle testée.

    Je vais commencer mes recherches côté librairie xml python, mais je ne souhaite pas un truc lourd.
    L'objectif du script c'est de prendre un fichier xml en entrée, de le lire et en fonction de certaines valeurs, modifier le contenu <cle></cle> ou supprimer le noeud pour en faire un autre XML(modifié, épuré).

    @+

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 90
    Par défaut
    Salut,

    je reviens sur mon message. J'ai avancé dans mon script python. Mais, je bloque toujours pour supprimer un noeud. J'ai isolé la partie du code qui me pose problème pour travailler dessus.

    Voici le 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
     
    XML_data = '''<root>
    <Element>
    <Simple>
    <Cle>blabla</Cle>
    <Val>toto</Val>
    </Simple>
    </Element>
    </root>'''
    root = et.XML(XML_data)
    p = root.find('Element')  # le père
    e = p.find('Simple')  # le fils
    p.remove(e)  # supression
    print (et.tostring(root))  # affichage du document mis à jour.
    Ce code fonctionne bien, je supprime bien le noeud <Simple></Simple>. Mais si je mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    XML_data = '''<root>
    <Element item="VAR">
    <Simple>
    <Cle>blabla</Cle>
    <Val>toto</Val>
    </Simple>
    </Element>
    </root>'''
    root = et.XML(XML_data)
    p = root.find('Element item="VAR"')  # le père
    e = p.find('Simple')  # le fils
    p.remove(e)  # supression
    print (et.tostring(root))  # affichage du document mis à jour.
    ça ne fonctionne plus. Pourquoi ? Je suis obligé de spécifier l'attribut item car dans le fichier xml d'origine, il y aura d'autres balises <Element> avec des item différents.

    Merci pour vos retours.

    Bonne journée.

    Cdt,

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 742
    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 742
    Par défaut
    Salut,

    Citation Envoyé par lasnico37 Voir le message
    ça ne fonctionne plus. Pourquoi ?
    Parce que rechercher le nœud <Element item=XXX>...</Element> ou XXX est "VAR" ne se fait pas via root.find('Element item="VAR"') qui devrait retourner None (et la conséquence sera qu'on ne supprime pas <Simple>...</Simple>) mais avec une syntaxe Xpath: root.find('.//Element[@item="VAR"]').

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 90
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Parce que rechercher le nœud <Element item=XXX>...</Element> ou XXX est "VAR" ne se fait pas via root.find('Element item="VAR"') qui devrait retourner None (et la conséquence sera qu'on ne supprime pas <Simple>...</Simple>) mais avec une syntaxe Xpath: root.find('.//Element[@item="VAR"]').

    - W
    Merci ! ça fonctionne très bien. Je vais pouvoir me baser là-dessus pour le reste. Je vais intégrer cette portion de code dans mon script principal, effectuer quelques ajustements, et ça devrait le faire.

    Bonne journée.

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

Discussions similaires

  1. appel d'une fonction dans une balise img
    Par DiverSIG dans le forum Langage
    Réponses: 1
    Dernier message: 10/09/2009, 09h00
  2. Mettre le return d'une fonction dans une balise input
    Par khaled.mann dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 21/04/2009, 06h55
  3. Suppression de ligne en fonction d'une colonne
    Par PPLILH2008 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 23/06/2008, 10h43
  4. Récupérer le résultat d'une fonction dans une balise html
    Par Hayato dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/06/2006, 17h04
  5. Réponses: 2
    Dernier message: 14/06/2006, 10h34

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