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


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


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().


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)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.