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


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


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


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)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.