【问题标题】:Python xml ElementTree from a string source?来自字符串源的 Python xml ElementTree?
【发布时间】:2010-10-13 10:07:50
【问题描述】:

ElementTree.parse 从文件中读取,如果我已经在字符串中包含 XML 数据,我该如何使用它?

也许我在这里遗漏了一些东西,但必须有一种方法可以使用 ElementTree 而无需将字符串写入文件并再次读取它。

xml.etree.elementtree

【问题讨论】:

    标签: python xml


    【解决方案1】:

    您可以将文本解析为字符串,从而创建一个元素,并使用该元素创建一个 ElementTree。

    import xml.etree.ElementTree as ET
    tree = ET.ElementTree(ET.fromstring(xmlstring))
    

    我刚刚遇到这个问题,文档虽然完整,但对于 parse()fromstring() 方法之间的用法差异并不是很直接。

    【讨论】:

    • 第二行可以简单的root = ET.fromstring(xmlstring)。等于ET.parse('file.xml').getroot():docs.python.org/3.6/library/…
    • @Anton,正如 OP 所说,这个想法是生成一个 ElementTree,而不是一个元素。例如,当您想使用 ElementTree.write() 时,这很有用。
    【解决方案2】:

    如果您使用xml.etree.ElementTree.parse 从文件中解析,那么您可以使用xml.etree.ElementTree.fromstring 来获取文档的根Element。通常你实际上并不需要ElementTree

    xml.etree.ElementTree

    【讨论】:

    • 问题是 ElementTree.fromstring 生成一个元素,而不是 ElementTree!有谁知道如何解决这个问题?
    • 与@SamuelLampa 提到的问题相同。我不是 ElementTree,我不能为此做getroot()
    • @SamuelLampa 见dgassaway's answer,使用ET.ElementTree(ET.fromstring(xmlstring))
    • 正确答案见@dgassaway提供的答案
    • 不要忘记导入语句
    【解决方案3】:

    你需要xml.etree.ElementTree.fromstring(text)

    from xml.etree.ElementTree import XML, fromstring
    myxml = fromstring(text)
    

    【讨论】:

    • 是的,但这不是ElementTree 它是根Element。这个 API 是不同的,不能做所有相同的事情。
    【解决方案4】:

    io.StringIO 是将 XML 导入xml.etree.ElementTree 的另一种选择:

    import io
    f = io.StringIO(xmlstring)
    tree = ET.parse(f)
    root = tree.getroot()
    

    但是,它不会影响人们假设在tree 中的 XML 声明(尽管 ElementTree.write() 需要这样做)。见How to write XML declaration using xml.etree.ElementTree

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      • 2011-09-06
      • 2015-02-02
      • 2016-12-03
      • 1970-01-01
      • 2012-01-24
      • 2013-02-24
      相关资源
      最近更新 更多