Bir dize kaynağından Python xml ElementTree?


118

ElementTree.parse bir dosyadan okur, eğer bir dizede XML verisine zaten sahipsem bunu nasıl kullanabilirim?

Belki burada bir şeyi özlüyorum ama ElementTree'yi dizeyi bir dosyaya yazmadan ve tekrar okumadan kullanmanın bir yolu olmalı.

xml.etree.elementtree


2
Merhaba George, ikinci yanıtı (dgassaway) doğru yanıt olarak kabul edebilirseniz harika olur.
famargar

Yanıtlar:


89

xml.etree.ElementTree.parseBir dosyadan ayrıştırmak için kullanıyorsanız xml.etree.ElementTree.fromstring, metinden ayrıştırmak için kullanabilirsiniz .

Bkz. Xml.etree.ElementTree


38
Sorun, ElementTree.fromstring'in bir ElementTree değil, bir öğe oluşturmasıdır! Bu konuda nasıl çalışılacağını bilen var mı?
Samuel Lampa

4
@ SamuelLampa'nın bahsettiği sorunla aynı. Yapmam mümkün değilim, bir elementtree değil getroot()bunun için
Siddharth Menon

23
@SamuelLampa dgassaway'in cevabına bakın , kullanınET.ElementTree(ET.fromstring(xmlstring))
Colin Pickard

6
doğru cevap için, @dgassaway tarafından sağlanan cevaba bakın
2.718

İthalat beyanlarını unutmayın
Stevoisiak

227

Metni bir dize olarak ayrıştırabilir, bu bir Eleman oluşturur ve bu Elemanı kullanarak bir ElementTree oluşturabilirsiniz.

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

Bu sorunla yeni karşılaştım ve dokümantasyon tamamlanmış olsa da, parse()ve fromstring()yöntemleri arasındaki kullanım farkı konusunda çok açık değil .


5
İkinci satır basit olabilir root = ET.fromstring(xmlstring). Eşittir ET.parse('file.xml').getroot(): docs.python.org/3.6/library/…
Anton Tarasenko

3
@Anton, OP'nin belirttiği gibi, fikir bir Element değil, bir ElementTree üretmektir. Bu, örneğin ElementTree.write () kullanmak istediğinizde kullanışlıdır.
batbrat

17

İhtiyacın var xml.etree.ElementTree.fromstring(text)

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.