Подтвердить что ты не робот

Python ElementTree: анализ строки и получение экземпляра ElementTree

У меня есть строка, содержащая XML-данные, которые возвращаются из запроса http.

Я использую ElementTree для анализа данных, и я хочу, чтобы затем искать рекурсивно для элемента.

В соответствии с этим вопросом я могу искать рекурсивно только с result.findall(), если result имеет тип ElementTree, а не тип Element.

Теперь xml.etree.ElementTree.fromstring(), используемый для синтаксического анализа строки, возвращает объект Element, а xml.etree.ElementTree.parse(), используемый для синтаксического анализа файла, возвращает объект ElementTree.

Мой вопрос заключается в следующем: как я могу разобрать строку и получить экземпляр ElementTree? (без какого-либо безумия, как запись во временный файл)

4b9b3361

Ответ 1

Когда вы используете ElementTree.fromstring(), то, что вы возвращаете, в основном является корнем дерева, поэтому, если вы создадите новое дерево, подобное этому ElementTree.ElementTree(root), которое вы получите, вы ищете.

Итак, чтобы было ясно:

from xml.etree import ElementTree
tree = ElementTree.ElementTree(ElementTree.fromstring(<your_xml_string>))

или

from xml.etree.ElementTree import fromstring, ElementTree
tree = ElementTree(fromstring(<your_xml_string>))

Ответ 2

Поверните свою строку в файл-подобный объект и используйте ElementTree.parse:

from xml.etree import ElementTree
from cStringIO import StringIO

tree = ElementTree.parse(StringIO(string))