python afficher ce que contient balsie xml sans connaitre le nom des balises

a marqué ce sujet comme résolu.

Bonjour, je cherche un moyen d’afficher le contenue de balises xml sans en connaitre le nom. J’ai regardé pas mal de tuto par exemple ici http://apprendre-python.com/page-xml-python-xpath mais a chaque fois l’auteur connais le nom de ces balises.

voici mon fichier xml :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<root>
    <discovers>
        <discover>
            <zoulou>zag</zoulou>
            <yotta>bob</yotta>
            <alpha>ned</alpha>
        </discover>

        <discover>
            <beta>Zorro</beta>
            <omega>Danseur</omega>
        </discover>
    </discovers>
</root>

je voudrais en python afficher tous ce que contient les balises discover

je voudrais avoir en output :zag,bob,ned,Zorro,Danseur

mais il faut partir du principe que l’on ne connais pas les noeuds qu’il y’a dans les discover

je ne connais zoulou,yotta,beta… je sais seulement que ces éléments sont dans root/discovers/discover

+0 -0

Salut,

Je n’ai rien essayé encore, mais avec un xpath du genre discover//text() tu devrais arriver à tes fins.

Edit : Je viens d’essayer avec ElementTree qui ne connaît pas le text(), mais j’obtiens le résultat que tu veux en concaténant tous les attributs text des tags répondant à la requête discovers/discover//* exécutée depuis le nœud racine.

oui le nombre de nœud dans mes balises "discover" est variable, il peut y en avoir 1 ou 1000 par exemple c’est pas fixe.

c’est pour cela que j’ai rajouter la balise alpha pour éviter une fausse bonne solution.

mais merci quand meme, je suis en train de regarder la solution de entwanne

+0 -0

oui le nombre de nœud dans mes balises "discover" est variable, il peut y en avoir 1 ou 1000 par exemple c’est pas fixe.

c’est pour cela que j’ai rajouter la balise alpha pour éviter une fausse bonne solution.

jipete

Je ne vois pas en quoi ce serait une fausse bonne solution : le path que j’ai montré est censé te remonter tous les noeuds xmls se trouvant sous discover, sans distinction sur leur nom, et donc tu n’as plus qu’à en extraire le texte, ce que dit déjà plus ou moins entwanne.

1
2
3
>>> tree = ElementTree.fromstring(data)
>>> [elt.text for elt in tree.findall("discovers/discover/*")]
['zag', 'bob', 'ned', 'Zorro', 'Danseur']
+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte