Python xml ElementTree з джерела рядка?


117

ElementTree.parse читає з файлу, як я можу це використовувати, якщо у мене вже є XML-дані в рядку?

Можливо, мені щось тут не вистачає, але повинен бути спосіб використовувати ElementTree, не виписуючи рядок у файл і читаючи його знову.

xml.etree.elementtree


2
Привіт, Джордж, було б чудово, якби ти міг прийняти другу відповідь (ганьба) як правильну.
famargar

Відповіді:


89

Якщо ви використовуєте xml.etree.ElementTree.parseдля розбору з файлу, ви можете використовувати xml.etree.ElementTree.fromstringдля розбору тексту.

Дивіться xml.etree.ElementTree


38
Проблема полягає в тому, що ElementTree.fromstring генерує елемент, а не ElementTree! Хтось знає, як обійти це?
Самуель Лампа

4
Та сама проблема, яку згадував @SamuelLampa. Я не ElementTree, я не в змозі зробити getroot()для цього
Сиддхарт Менон

23
@SamuelLampa дивіться відповідь dgassaway , використовуйтеET.ElementTree(ET.fromstring(xmlstring))
Colin Pickard

6
за правильну відповідь, побачити один наданий @dgassaway
2,718

Не забувайте про імпортні заяви
Stevoisiak

225

Ви можете проаналізувати текст як рядок, який створює елемент, і створити 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, як заявляє ОП, ідея полягає у створенні ElementTree, а не Element. Це корисно, наприклад, коли ви хочете використовувати ElementTree.write ().
баббрат

16

Вам потрібна xml.etree.ElementTree.fromstring(text)

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.