Python xml ElementTree da una sorgente di stringa?


118

ElementTree.parse legge da un file, come posso usarlo se ho già i dati XML in una stringa?

Forse mi manca qualcosa qui, ma deve esserci un modo per usare ElementTree senza scrivere la stringa su un file e leggerlo di nuovo.

xml.etree.elementtree


2
Ciao Giorgio, sarebbe fantastico se tu potessi accettare la seconda risposta (dgassaway) come quella corretta.
famargar

Risposte:


89

Se stai usando xml.etree.ElementTree.parseper analizzare da un file, puoi usarexml.etree.ElementTree.fromstring per analizzare dal testo.

Vedere xml.etree.ElementTree


38
Il problema è che ElementTree.fromstring genera un elemento e non un ElementTree! Qualcuno sa come aggirare questo?
Samuel Lampa

4
Stesso problema menzionato da @SamuelLampa. Io non sono un elementtree, io non sono in grado di fare getroot()per questo
Siddharth Menon

23
@SamuelLampa vedi la risposta di dgassaway , usaET.ElementTree(ET.fromstring(xmlstring))
Colin Pickard

6
per la risposta corretta, vedere quella fornita da @dgassaway
2.718

Non dimenticare le dichiarazioni di importazione
Stevoisiak

226

Puoi analizzare il testo come una stringa, che crea un elemento e creare un ElementTree utilizzando quell'elemento.

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

Mi sono appena imbattuto in questo problema e la documentazione, sebbene completa, non è molto semplice sulla differenza di utilizzo tra i metodi parse()e fromstring().


5
La seconda riga può essere semplice root = ET.fromstring(xmlstring). Uguale a ET.parse('file.xml').getroot(): docs.python.org/3.6/library/…
Anton Tarasenko

3
@Anton, come afferma l'OP, l'idea è di generare un ElementTree e non un Element. Ciò è utile, ad esempio, quando si desidera utilizzare ElementTree.write ().
batbrat

17

Hai bisogno di xml.etree.ElementTree.fromstring(text)

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.