Python ElementTree: анализ строки и получение экземпляра ElementTree - PullRequest
20 голосов
/ 20 декабря 2011

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

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

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

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

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

Ответы [ 2 ]

28 голосов
/ 20 декабря 2011

Когда вы используете 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>))
6 голосов
/ 21 декабря 2011

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

from xml.etree import ElementTree
from cStringIO import StringIO

tree = ElementTree.parse(StringIO(string))
...