Python xml ElementTree de uma fonte de string?

117

O ElementTree.parse lê um arquivo, como posso usar isso se já tenho os dados XML em uma string?

Talvez eu esteja faltando alguma coisa aqui, mas deve haver uma maneira de usar o ElementTree sem gravar a string em um arquivo e lê-la novamente.

xml.etree.elementtree

George
fonte
2
Olá, George, seria ótimo se você pudesse aceitar a segunda resposta (dgassaway) como a correta.
famargar

Respostas:

89

Se você estiver usando xml.etree.ElementTree.parsepara analisar de um arquivo, poderá usar xml.etree.ElementTree.fromstringpara analisar de texto.

Veja xml.etree.ElementTree

Jim H.
fonte
38
O problema é que ElementTree.fromstring gera um elemento, e não um ElementTree! Alguém sabe como contornar isso?
Samuel Lampa
4
Mesmo problema mencionado por @SamuelLampa. Eu não sou um ElementTree, não sou capaz de fazer getroot()por isso
Siddharth Menon
23
@SamuelLampa veja a resposta de dgassaway , useET.ElementTree(ET.fromstring(xmlstring))
Colin Pickard
6
para ver a resposta correta, consulte a fornecida por @dgassaway
2.718
Não se esqueça das declarações de importação
Stevoisiak
225

Você pode analisar o texto como uma string, o que cria um elemento e criar um ElementTree usando esse elemento.

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

Acabei de encontrar esse problema e a documentação, embora completa, não é muito direta quanto à diferença de uso entre os métodos parse()e fromstring().

dgassaway
fonte
5
A segunda linha pode ser simples root = ET.fromstring(xmlstring). Igual a ET.parse('file.xml').getroot(): docs.python.org/3.6/library/…
Anton Tarasenko
3
@Anton, como afirma o OP, a ideia é gerar um ElementTree, e não um Element. Isso é útil, por exemplo, quando você deseja usar ElementTree.write ().
batbrat
16

Você precisa do xml.etree.ElementTree.fromstring(text)

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