Python ElementTree:解析字符串并获取ElementTree实例

Python ElementTree:解析字符串并获取ElementTree实例,python,xml,elementtree,Python,Xml,Elementtree,我有一个字符串,其中包含从http请求返回的XML数据 我正在使用解析数据,然后我想递归地搜索一个元素 根据,如果result是ElementTree类型,而不是Element类型,我只能使用result.findall()递归搜索 现在,用于解析字符串的xml.etree.ElementTree.fromstring()返回一个元素对象,而用于解析文件的xml.etree.ElementTree.parse()返回一个ElementTree对象 我的问题是:如何解析字符串并获得ElementT

我有一个字符串,其中包含从http请求返回的XML数据

我正在使用解析数据,然后我想递归地搜索一个元素

根据,如果
result
ElementTree
类型,而不是
Element
类型,我只能使用
result.findall()
递归搜索

现在,用于解析字符串的
xml.etree.ElementTree.fromstring()
返回一个
元素
对象,而用于解析文件的
xml.etree.ElementTree.parse()
返回一个
ElementTree
对象


我的问题是:如何解析字符串并获得
ElementTree
实例?
(没有像写入临时文件那样的疯狂)

当您使用
ElementTree.fromstring()
时,您得到的基本上是树的根,因此,如果您创建一个像这样的新树
ElementTree.ElementTree(root)
,您将得到您想要的

因此,更清楚地说:

from xml.etree import ElementTree
tree = ElementTree.ElementTree(ElementTree.fromstring(<your_xml_string>))
从xml.etree导入元素树
tree=ElementTree.ElementTree(ElementTree.fromstring())
或:

from xml.etree.ElementTree导入fromstring,ElementTree
tree=ElementTree(fromstring())

将字符串转换为类似文件的对象,并使用
ElementTree.parse

from xml.etree import ElementTree
from cStringIO import StringIO

tree = ElementTree.parse(StringIO(string))

我只想补充一点——对于那些使用lxml的人来说——在lxml中(元素总是属于文档/树,即使是隐式的),您可以使用getrootttree()方法。谢谢!etree中非常烦人的API设计,根据输入源有不同类型的输出。非常令人困惑:(这在文档中不是很清楚。“fromstring()将XML从字符串直接解析到元素中,该元素是解析树的根元素。其他解析函数可能会创建ElementTree。”太好了,这就是我要找的元素。:-)
from xml.etree import ElementTree
from cStringIO import StringIO

tree = ElementTree.parse(StringIO(string))