Python ElementTree: анализ строки и получение экземпляра ElementTree
У меня есть строка, содержащая XML-данные, которые возвращаются из запроса http.
Я использую ElementTree для анализа данных, и я хочу, чтобы затем искать рекурсивно для элемента.
В соответствии с этим вопросом я могу искать рекурсивно только с result.findall()
, если result
имеет тип ElementTree
, а не тип Element
.
Теперь xml.etree.ElementTree.fromstring()
, используемый для синтаксического анализа строки, возвращает объект Element
, а xml.etree.ElementTree.parse()
, используемый для синтаксического анализа файла, возвращает объект ElementTree
.
Мой вопрос заключается в следующем: как я могу разобрать строку и получить экземпляр ElementTree
? (без какого-либо безумия, как запись во временный файл)
Ответы
Ответ 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))