Python xml ElementTree dari sumber string?

118

ElementTree.parse membaca dari sebuah file, bagaimana saya bisa menggunakan ini jika saya sudah memiliki data XML dalam sebuah string?

Mungkin saya melewatkan sesuatu di sini, tetapi pasti ada cara untuk menggunakan ElementTree tanpa menuliskan string ke file dan membacanya lagi.

xml.etree.elementtree

George
sumber
2
Hai George, alangkah baiknya jika Anda dapat menerima jawaban kedua (dgassaway) sebagai jawaban yang benar.
famargar

Jawaban:

89

Jika Anda menggunakan xml.etree.ElementTree.parseuntuk mengurai dari file, maka Anda dapat menggunakan xml.etree.ElementTree.fromstringuntuk mengurai dari teks.

Lihat xml.etree.ElementTree

Jim H.
sumber
38
Masalahnya adalah ElementTree.fromstring menghasilkan elemen, dan bukan ElementTree! Ada yang tahu bagaimana menyiasatinya?
Samuel Lampa
4
Masalah yang sama seperti yang disebutkan @SamuelLampa. Saya bukan ElementTree, saya tidak dapat melakukan getroot()untuk ini
Siddharth Menon
23
@SamuelLampa lihat jawaban dgassaway , gunakanET.ElementTree(ET.fromstring(xmlstring))
Colin Pickard
6
untuk jawaban yang benar, lihat yang disediakan oleh @dgassaway
2.718
Jangan lupa pernyataan impor
Stevoisiak
226

Anda dapat mengurai teks sebagai string, yang membuat Elemen, dan membuat ElementTree menggunakan Elemen itu.

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

Saya baru saja menemukan masalah ini dan dokumentasinya, meskipun lengkap, tidak terlalu jelas tentang perbedaan penggunaan antara metode parse()dan fromstring().

dgassaway
sumber
5
Baris kedua bisa sederhana root = ET.fromstring(xmlstring). Setara ET.parse('file.xml').getroot(): docs.python.org/3.6/library/…
Anton Tarasenko
3
@ Anton, seperti yang dinyatakan OP, idenya adalah untuk menghasilkan ElementTree, dan bukan Elemen. Ini berguna, misalnya, ketika Anda ingin menggunakan ElementTree.write ().
batbrat
17

Anda membutuhkan xml.etree.ElementTree.fromstring(text)

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