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.