Python xml ElementTree из источника строки?


118

ElementTree.parse читает из файла, как я могу использовать это, если у меня уже есть данные XML в строке?

Возможно, мне что-то здесь не хватает, но должен быть способ использовать ElementTree, не записывая строку в файл и не читая ее снова.

xml.etree.elementtree


2
Привет, Джордж, было бы здорово, если бы ты принял второй ответ (dgassaway) как правильный.
famargar

Ответы:


89

Если вы используете xml.etree.ElementTree.parseдля синтаксического анализа из файла, вы можете использовать xml.etree.ElementTree.fromstringдля синтаксического анализа текста.

См. Xml.etree.ElementTree


38
Проблема в том, что ElementTree.fromstring генерирует элемент, а не ElementTree! Кто-нибудь знает, как это обойти?
Samuel Lampa

4
Та же проблема, что и @SamuelLampa. Я не ElementTree, я не в состоянии сделать getroot()для этого
Сиддхарт Менон

23
@SamuelLampa см . Ответ dgassaway , используйтеET.ElementTree(ET.fromstring(xmlstring))
Колин Пикард

6
за правильный ответ, увидеть один предоставленный @dgassaway
2,718

Не забудьте
про

227

Вы можете проанализировать текст как строку, которая создает элемент, и создать ElementTree, используя этот элемент.

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

Я просто наткнулся на этот вопрос и документации, в то время как полная, не очень просто на разнице в использовании между parse()и fromstring()методами.


5
Вторая строчка может быть просто root = ET.fromstring(xmlstring). Равно ET.parse('file.xml').getroot(): docs.python.org/3.6/library/…
Антон Тарасенко

3
@Anton, как заявляет OP, идея состоит в том, чтобы сгенерировать ElementTree, а не Element. Это полезно, например, когда вы хотите использовать ElementTree.write ().
batbrat

17

Вам нужен xml.etree.ElementTree.fromstring(text)

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

1

io.StringIO - еще один вариант для получения XML в xml.etree.ElementTree :

import io
f = io.StringIO(xmlstring)
tree = ET.parse(f)
root = tree.getroot()

Hovever, это не влияет на объявление XML, которое можно было бы использовать tree(хотя это необходимо для ElementTree.write () ). См. Как написать объявление XML с помощью xml.etree.ElementTree .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.