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


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


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


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)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.