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 :

lxml tester si une balise existe


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 lxml tester si une balise existe
    Bonjour,

    je découvre et j'apprends lxml et j'aimerais traiter un fichier xml.

    Si une balise n'est pas présente dans le flux, je dois extraire certaines données.

    La section du flux à traiter est de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <balise>
    ----<balise1> Val 1 </balise1>
    ----<balise2> Val 2 </balise2>
    ----<balise3> Val 3 </balise3>
    ----<balise4> Val 4 </balise4>
    </balise>
    Si balise4 n'est pas présente dans le flux, je dois extraire balise1, balise2, balise3. Je n'y arrive pas.

    Début de code python :
    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
     
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
     
    try:
        from lxml import etree
        tree = etree.parse("fichier.xml")
        contenuBalise = tree.xpath("/Balise")
        compteur = 0
        for cB in contenuBalise: # boucle sur <Balise>
            compteur += 1
            # Ici, j'aimerais mettre mon test. Si je ne trouve pas de balise4 dans cB, alors extraction. Mais je bloque
        print("Nb : " + str(compteur))
    except ImportError:
        print("Mince lxml import ne fonctione pas")
    Merci pour vos pistes et retour.

    @+ tard

  2. #2
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Salut.

    Si tu débutes avec xml, ton fichier xml n'est sans doute pas au meilleur format.

    Pourquoi utiliser python2, sachant que les jours de python2 sont comptés ? Pourquoi utiliser lxml ? xml.etree ne nécessite aucune installation de module puisque dispo dans la bibliothèque standard.

    Voici un exemple pour ton fichier avec etree.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import xml.etree.ElementTree as etree
    tree = etree.parse("fichier.xml")
    root = tree.getroot()
     
    nodes = tuple(node.tag for node in root)
     
    if 'balise4' in nodes:
        print('4 children')
    else:
        print('only 3 children')
    Mais je pense qu'il serait mieux de créer des attributs à tes balises de façon à obtenir un fichier comme par ex.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <balises>
        <balise id="1"> Val 1 </balise>
        <balise id="2"> Val 2 </balise>
        <balise id="3"> Val 3 </balise>
        <balise id="4"> Val 4 </balise>
    </balises>
    Puis rectifier le script pour vérifier les ids.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import xml.etree.ElementTree as etree
    tree = etree.parse("fichier.xml")
    root = tree.getroot()
     
    nodes = tuple(int(node.attrib['id']) for node in root)
     
    if 4 in nodes:
        print('4 children')
    else:
        print('only 3 children')

  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 bistouille Voir le message
    Si tu débutes avec xml, ton fichier xml n'est sans doute pas au meilleur format.
    J'ai juste mis un bout du fichier et je ne fabrique pas le fichier, je le reçois d'une application métier et je n'ai pas la main dessus.

    Citation Envoyé par bistouille Voir le message
    Pourquoi utiliser python2, sachant que les jours de python2 sont comptés ? Pourquoi utiliser lxml ? xml.etree ne nécessite aucune installation de module puisque dispo dans la bibliothèque standard.
    C'est la version 2.7 qui est installé sur un serveur AIX. Et ce n'est pas moi qui maîtrise les environnements. Je n'ai pas de contrainte à utiliser xml.etree. Mais d'un site à l'autre pour apprendre, certains préconisent lxml et d'autres xml.etree. J'ai voulu faire un choix.

    Merci pour ton aide, je vais étudier tes scripts et faire des essais.

    Bonne après-midi.

Discussions similaires

  1. Tester si une données existe deja
    Par mael94420 dans le forum ASP
    Réponses: 1
    Dernier message: 18/10/2005, 17h09
  2. Tester qu'une valeur existe dans une "liste"
    Par Oluha dans le forum Langage
    Réponses: 12
    Dernier message: 04/08/2005, 23h01
  3. Réponses: 2
    Dernier message: 20/05/2005, 10h18
  4. MDI => Tester si une fenêtre existe déjà ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 4
    Dernier message: 17/04/2005, 21h41
  5. Tester qu'une date existe
    Par Oluha dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/03/2005, 10h37

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