Python xml ElementTree de una fuente de cadena?

117

El ElementTree.parse lee de un archivo, ¿cómo puedo usar esto si ya tengo los datos XML en una cadena?

Tal vez me falte algo aquí, pero debe haber una manera de usar ElementTree sin escribir la cadena en un archivo y volver a leerlo.

xml.etree.elementtree

Jorge
fuente
2
Hola George, sería genial si pudieras aceptar la segunda respuesta (dgassaway) como la correcta.
famargar

Respuestas:

89

Si está usando xml.etree.ElementTree.parsepara analizar desde un archivo, entonces puede usarxml.etree.ElementTree.fromstring para analizar desde texto.

Ver xml.etree.ElementTree

Jim H.
fuente
38
El problema es que ElementTree.fromstring genera un elemento, ¡y no un ElementTree! ¿Alguien sabe cómo solucionar esto?
Samuel Lampa
4
El mismo problema que mencionó @SamuelLampa. No soy un ElementTree, no puedo hacerlo getroot()por esto
Siddharth Menon
23
@SamuelLampa vea la respuesta de dgassaway , useET.ElementTree(ET.fromstring(xmlstring))
Colin Pickard
6
para obtener la respuesta correcta, consulte la proporcionada por @dgassaway
2.718
No olvide las declaraciones de importación
Stevoisiak
225

Puede analizar el texto como una cadena, lo que crea un elemento y crear un árbol de elementos utilizando ese elemento.

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

Me acabo de encontrar con este problema y la documentación, aunque completa, no es muy sencilla sobre la diferencia de uso entre los métodos parse()y fromstring().

dgassaway
fuente
5
La segunda línea puede ser sencilla root = ET.fromstring(xmlstring). Equals ET.parse('file.xml').getroot(): docs.python.org/3.6/library/…
Anton Tarasenko
3
@Anton, como dice el OP, la idea es generar un ElementTree, y no un Element. Esto es útil, por ejemplo, cuando desea utilizar ElementTree.write ().
batbrat
16

Necesitas el xml.etree.ElementTree.fromstring(text)

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