Python xml ElementTree à partir d'une source de chaîne?

118

Le ElementTree.parse lit à partir d'un fichier, comment puis-je l'utiliser si j'ai déjà les données XML dans une chaîne?

Il me manque peut-être quelque chose ici, mais il doit y avoir un moyen d'utiliser ElementTree sans écrire la chaîne dans un fichier et le relire.

xml.etree.elementtree

George
la source
2
Salut George, ce serait formidable si vous pouviez accepter la deuxième réponse (dgassaway) comme la bonne.
famargar

Réponses:

89

Si vous utilisez xml.etree.ElementTree.parsepour analyser à partir d'un fichier, vous pouvez utiliser xml.etree.ElementTree.fromstringpour analyser à partir de texte.

Voir xml.etree.ElementTree

Jim H.
la source
38
Le problème est que ElementTree.fromstring génère un élément, et non un ElementTree! Quelqu'un sait comment contourner ce problème?
Samuel Lampa
4
Même problème que @SamuelLampa mentionné. Je ne suis pas un ElementTree, je ne suis pas capable de faire getroot()pour ça
Siddharth Menon
23
@SamuelLampa voir la réponse de dgassaway , utilisezET.ElementTree(ET.fromstring(xmlstring))
Colin Pickard
6
pour la bonne réponse, voir celle fournie par @dgassaway
2.718
N'oubliez pas les déclarations d'importation
Stevoisiak
227

Vous pouvez analyser le texte sous forme de chaîne, ce qui crée un élément et créer un ElementTree à l'aide de cet élément.

import xml.etree.ElementTree as ET
tree = ET.ElementTree(ET.fromstring(xmlstring))

Je viens de tomber sur ce problème et la documentation, bien que complète, n'est pas très simple sur la différence d'utilisation entre les méthodes parse()et fromstring().

dgassaway
la source
5
La deuxième ligne peut être simple root = ET.fromstring(xmlstring). Égale à ET.parse('file.xml').getroot(): docs.python.org/3.6/library/…
Anton Tarasenko
3
@Anton, comme le déclare l'OP, l'idée est de générer un ElementTree, et non un Element. Ceci est utile, par exemple, lorsque vous souhaitez utiliser ElementTree.write ().
batbrat
17

Vous avez besoin du xml.etree.ElementTree.fromstring(text)

from xml.etree.ElementTree import XML, fromstring
myxml = fromstring(text)
karlcow
la source