我有一个包含从http请求返回的XML数据的字符串。
我使用ElementTree来解析数据,然后我想以递归方式搜索元素。
根据this question,如果result.findall()
类型为result
而不是ElementTree
,我只能使用Element
递归搜索。
现在xml.etree.ElementTree.fromstring()
用于解析字符串,返回Element
对象,而xml.etree.ElementTree.parse()
用于解析文件,返回{{1}对象。
我的问题是:我如何解析字符串并获得ElementTree
实例?(没有像写入临时文件那样疯狂)
答案 0 :(得分:27)
当你使用ElementTree.fromstring()
时,你得到的东西基本上就是树的根,所以如果你创建一个像ElementTree.ElementTree(root)
这样的新树,你就会找到你。< / p>
所以,为了更清楚:
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>))
答案 1 :(得分:6)
将您的字符串转换为类文件对象并使用ElementTree.parse
:
from xml.etree import ElementTree
from cStringIO import StringIO
tree = ElementTree.parse(StringIO(string))