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


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


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


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)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.