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 :

iterer uniquement dans les sous-elements d'un xml (python 2.7)


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 23
    Par défaut iterer uniquement dans les sous-elements d'un xml (python 2.7)
    bonjour!

    Je souhaite parser un document XML pour placer les valeurs en gras dans un dictionnaires:
    <mat id="F1" used="true" lib_name="F_1">
    <isotope id="AAA" density="3.333"> </isotope>
    <isotope id="BBB" density="4.444"></isotope>
    <mat id="F2" used="true" lib_name="F_2">
    <isotope id="AAA" density="1.111"></isotope>
    <isotope id="BBB" density="2.222"></isotope>
    le format souhaité de mon dicitonnaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {'density':{'F1':{'AAA':3.333, 'BBB':4.444}, 'F2':{'AAA':1.111, 'BBB', 2.222}}}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import xml.etree.ElementTree as ET
    self.tree = ET.parse('test.xml')
    self.root = self.tree.getroot()
    for matXML in self.root.getiterator('mat'):
       for isotopeXML in self.root.getiterator('isotope'):
           XMLdict['density'][matXML.attrib.get('id')][isotopeXML.attrib.get('id')] = isotopeXML.attrib.get('density')
    Ce code retourne:
    {'density': {'F1': {'AAA': '1.111111', 'BBB': '2.222222'}, 'fuel2': {'AAA': '1.111111', 'BBB': '2.222222'}}}
    parce que ma boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for matXML in self.root.getiterator('mat')
    itère sur tous les 4 children <isotope> et non pas seulements sur les deux children 'AAA' et 'BBB' appartenant à un <mat> donné.

    Savez vous comment régler ce problème?

    Merci !

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

    Citation Envoyé par pascaloupsu Voir le message
    Savez vous comment régler ce problème?
    Ce que fait le code me semble cohérent
    Vous avez écrit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for matXML in self.root.getiterator('mat'):
       for isotopeXML in self.root.getiterator('isotope'):
    1ère ligne, çà va chercher tout les 'mat' descendants de self.root,
    2ème ligne, çà va chercher tout les 'isotope' descendants de self.root.

    Si vous vouliez les 'isotope' descendants du matXML, c'est balaud... mais Python ne fait que ce que vous lui avez demandé...

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

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 23
    Par défaut
    Oui bien, je n'ai jamais dis que Python ne faisait pas ce qu'on lui demandait. Je cherchais de l'aide pour pouvoir corriger mon erreur ... "C'est Balaud" n'aide pas

  4. #4
    Membre expérimenté
    Homme Profil pro
    Administrateur Systèmes, Clouds et Réseaux /CAO/DAO/Ingénierie Electrotechnique
    Inscrit en
    Décembre 2014
    Messages
    457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur Systèmes, Clouds et Réseaux /CAO/DAO/Ingénierie Electrotechnique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 457
    Par défaut
    Ma réponse t'aidera peu je pense, n'étant que débutant mais pour avoir bossé avec du xml en entrée en sortie avec une gestion du fichier de config, de fichiers taches à exécuter. C'est peut être moins joli mais j'utilise une recherche de tag, de là j'ai les enfants, je double boucle dessus pour récupérer ce dont j'ai besoin. Je n'ai pas encore utilisé les itérateurs et bon.... pour avoir fait un algo qui fait lister tous les éléments d'une classe, et qui lui attribut en échange toutes les feuilles d'un fichier xml, j'ai fait 5 millièmes de secondes. pour une vingtaine d'entrées sur un processeur amd 5350 et ubuntu (ce qui comme on peut l'imaginer amène quand même pas mal de boucles, mais je suis une feignasse et je ne voulais pas entrer chaque paramètre à la main en plus il est possible que d'autres paramètres s'ajoutent, du coup je n'ai plus qu'a modiifier que ma classe conteneur et mon fichier xml tout le reste du programme s'adapte).

Discussions similaires

  1. [Dojo] Afficher les sous elements d'un dossier dans une tree
    Par devkaty dans le forum Bibliothèques & Frameworks
    Réponses: 8
    Dernier message: 18/09/2009, 00h03
  2. [visibilité] Nouveaux Messages dans les sous Forum
    Par Maxoo dans le forum Evolutions du club
    Réponses: 13
    Dernier message: 03/07/2006, 10h35
  3. Calcul dans les sous-formulaires
    Par rafa55 dans le forum Access
    Réponses: 3
    Dernier message: 21/06/2006, 10h37
  4. se ballader dans les sous repertoires
    Par Krispy dans le forum Langage
    Réponses: 1
    Dernier message: 30/03/2006, 15h46
  5. [IB 6, FireBird 1.5] SKIP dans les sous-requêtes
    Par Magnus dans le forum Langage SQL
    Réponses: 8
    Dernier message: 15/09/2005, 14h14

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