【问题标题】:Python ElementTree: Parsing a string and getting ElementTree instancePython ElementTree:解析字符串并获取 ElementTree 实例
【发布时间】:2012-01-24 16:46:41
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: python xml elementtree


    【解决方案1】:

    把你的字符串变成一个类似文件的对象并使用ElementTree.parse:

    from xml.etree import ElementTree
    from cStringIO import StringIO
    
    tree = ElementTree.parse(StringIO(string))
    

    【讨论】:

    • 太好了,这就是我要找的那个。 :-)
    【解决方案2】:

    当你使用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>))
    

    【讨论】:

    • 我只想添加 - 对于那些使用 lxml 的人 - 在 lxml 中(元素始终属于文档/树,即使是隐式的),您可以使用 getrootttree() 方法。跨度>
    • 谢谢! etree 中真的很烦人的 API 设计,只是根据输入源有不同类型的输出。真令人困惑:(
    • 这在文档中真的不是很清楚。 “fromstring() 将 XML 从字符串直接解析为 Element,它是解析树的根元素。其他解析函数可能会创建 ElementTree。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多