Python xml ElementTree aus einer Stringquelle?

117

Die ElementTree.parse liest aus einer Datei. Wie kann ich diese verwenden, wenn ich die XML-Daten bereits in einer Zeichenfolge habe?

Vielleicht fehlt mir hier etwas, aber es muss eine Möglichkeit geben, den ElementTree zu verwenden, ohne die Zeichenfolge in eine Datei zu schreiben und erneut zu lesen.

xml.etree.elementtree

George
quelle
2
Hallo George, es wäre großartig, wenn du die zweite Antwort (dgassaway) als die richtige akzeptieren könntest.
Famargar

Antworten:

89

Wenn Sie xml.etree.ElementTree.parsezum Parsen aus einer Datei verwenden, können Sie xml.etree.ElementTree.fromstringzum Parsen aus Text verwenden.

Siehe xml.etree.ElementTree

Jim H.
quelle
38
Das Problem ist, dass ElementTree.fromstring ein Element generiert und keinen ElementTree! Weiß jemand, wie man das umgeht?
Samuel Lampa
4
Gleiches Problem wie bei @SamuelLampa erwähnt. Ich bin kein ElementTree, ich bin nicht in der Lage zu tun getroot()für diesen
Siddharth Menon
23
@SamuelLampa siehe dgassaways Antwort , benutzeET.ElementTree(ET.fromstring(xmlstring))
Colin Pickard
6
Für die richtige Antwort siehe die von @dgassaway
2.718
Vergessen Sie nicht die Import-Anweisungen
Stevoisiak
225

Sie können den Text als Zeichenfolge analysieren, die ein Element erstellt, und mit diesem Element einen Elementbaum erstellen.

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

Ich bin gerade auf dieses Problem gestoßen, und die Dokumentation ist zwar vollständig, aber hinsichtlich des Unterschieds in der Verwendung zwischen den Methoden parse()und nicht sehr einfach fromstring().

dgassaway
quelle
5
Die zweite Zeile kann einfach sein root = ET.fromstring(xmlstring). Equals ET.parse('file.xml').getroot(): docs.python.org/3.6/library/...
Anton Tarasenko
3
@Anton, wie im OP angegeben, besteht die Idee darin, einen ElementTree und kein Element zu generieren. Dies ist beispielsweise nützlich, wenn Sie ElementTree.write () verwenden möchten.
Batbrat
16

Du brauchst das xml.etree.ElementTree.fromstring(text)

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