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 :

Modifier données XML [Python 2.X]


Sujet :

Python

  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 Modifier données XML
    Bonjour,

    je dois modifier les valeurs de certaines balises XML afin d'anonymiser celle-ci.

    Le XML a une structure sous cette forme :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <Element item="zone1">
        <Simple>
    	<Cle>NomZone1</Cle>
    	<Val>Toto</Val>
       </Simple>
    J'ai essayé en utilisant xml.etree et en faisant une recherche via findall, mais je n'arrive pas à avoir le 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
    15
    16
    17
    18
    19
    20
    21
     
    tree = ET.parse(fic_xml)
    for e in tree.findall('.//Element[@item="zone1"]'):
        # On recherche tous les éléments <Simple>
        s = e.findall('Simple')
        # On boucle dessus pour récupérer les cles
        for cles in s:
            cle = cles.find('Cle')  # le fils
            # On met les clés dans une liste. Utile pour récupérer des données par la suite.
            listCle.append(cle.text)
            # On boucle dessus pour récupérer les valeurs
            for vals in s:
                val = vals.find('Val')
                # On met les valeurs dans une liste. Utile pour récupérer des données par la suite.
                listVal.append(val.text)
                if cle.text == "NomZone1":
                    print "otot"
                    val.text = val.text[0:1] + genNombre12() + genNombre2()
                if cle.text == "NomZone2":
                    #print listVal[i]
                    val.text = genLettres(val.text)
    Avec ce code, il modifie la valeur pour tous les VAL et pas uniquement pour celui testé dans le IF.

    Existe t'il un moyen de lire le XML et si je tombe sur une balise qui doit-être modifiée, alors j'exécute ma fonction d'anonymisation.

    Merci pour vos retours / pistes.

    Bonne journée.

    Cdt,

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Bonjour

    2 remarques :

    1) Ceci est très bizarre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        for cles in s:
            [....]
            for vals in s:
    2) Commencer par ne pas changer les valeurs dans les if (vérifiez bien qu'à la sortie rien n'est changer) et contenter vous d'afficher simplement le changement que vous feriiez.
    Et vérifiiez que le changement affiché est bien celui souhaité.

  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
    A la base, le for val n'était pas dans le for cles, je l'ai mis à l'intérieur pour différents tests.

    Sans modification dans les boucles for, je récupère bien les différentes clé / valeurs dans des listes séparées.

  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
    J'ai un peu avancé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for e in tree.findall('.//Element[@item="zone1"]'):
     
        if e.find('.//Simple/Cle').text == "toto":
            e.find('.//Simple/Val').text = e.find('.//Simple/Val').text[0:1] + genNombre(
                e.find('.//Simple/Val').text[1:13]) + genNombre2()
     
        if e.find('.//Simple/Cle').text == "titi":
            print "itit"
            e.find('.//Simple/Val').text = genLettres(e.find('.//Simple/Val').text)
    avec ce code j'arrive à modifier la valeur de toutes les zones "toto" contenu dans Zone1. Par contre, il ne fonctionne pas sur la zone "titi". Pourquoi ?

    Merci.

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

    Citation Envoyé par lasnico37 Voir le message
    avec ce code j'arrive à modifier la valeur de toutes les zones "toto" contenu dans Zone1. Par contre, il ne fonctionne pas sur la zone "titi". Pourquoi ?
    Parce que vous avez écrit: for e in tree.findall('.//Element[@item="zone1"]'):.
    Et Python s'applique à faire ce que vous lui demandez et pas autre chose.

    - 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
    C'est bon j'ai trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for e in tree.findall('.//Element[@item="zone1"]'):
     for simple in e.findall('.//Simple'):
        if simple.find('.//Cle').text == "toto":
            simple.find('.//Val').text = simple.find('.//Val').text[0:1] + genNombre(
                simple.find('.//Val').text[1:13]) + genNombre2()
     
        if simple.find('.//Cle').text == "titi":
            print "itit"
            simple.find('.//Val').text = genLettres(simple.find('.//Val').text)
    de cette manière, j'arrive à modifier la valeur de chaque toto, titi dans l'élément "zone1".

    Je dois encore améliorer tout ça, mais je suis sur la bonne voie.

    @+

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

Discussions similaires

  1. [Mysql] Donnée XML >vers> BDD
    Par largiss dans le forum XQUERY/SGBD
    Réponses: 14
    Dernier message: 28/02/2017, 17h51
  2. [ods tagsets.excelxp] Modifier le type de données XML
    Par Filippo dans le forum ODS et reporting
    Réponses: 18
    Dernier message: 31/05/2011, 17h07
  3. [xml]manipuler des données xml sous Oracle9i
    Par crazy dans le forum SQL
    Réponses: 7
    Dernier message: 28/02/2004, 11h40
  4. problème xsl : inclure une donnée xml dans une balise html
    Par djodjo dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 03/01/2003, 09h24

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