来自字符串源的Python xml ElementTree?

Geo*_*rge 102 python xml

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

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

xml.etree.elementtree

dga*_*way 201

您可以将文本解析为字符串,从而创建Element,并使用该Element创建ElementTree.

import xml.etree.ElementTree as ET
tree = ET.ElementTree(ET.fromstring(xmlstring))
Run Code Online (Sandbox Code Playgroud)

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

  • 第二行可以简单地是`root = ET.fromstring(xmlstring)`.等于`ET.parse('file.xml').getroot()`:https://docs.python.org/3.6/library/xml.etree.elementtree.html#parsing-xml (3认同)
  • @Anton,如OP所述,其想法是生成ElementTree,而不是Element.例如,当您想要使用ElementTree.write()时,这很有用. (3认同)

Jim*_* H. 74

如果您正在使用xml.etree.ElementTree.parse从文件解析,则可以使用xml.etree.ElementTree.fromstring从文本中解析.

请参见xml.etree.ElementTree

  • 问题是ElementTree.fromstring生成一个元素,而不是ElementTree!任何人都知道如何解决这个问题? (35认同)
  • @SamuelLampa见[dgassaway的回答](http://stackoverflow.com/a/18281386/12744),使用`ET.ElementTree(ET.fromstring(xmlstring))` (19认同)
  • 要获得正确答案,请参阅@dgassaway提供的答案 (5认同)
  • 与@SamuelLampa提到的问题相同.我不是ElementTree,我不能为此做`getroot()` (4认同)

kar*_*cow 14

你需要xml.etree.ElementTree.fromstring(文本)

from xml.etree.ElementTree import XML, fromstring, tostring
myxml = fromstring(text)
Run Code Online (Sandbox Code Playgroud)


han*_*dle 12

io.StringIO是将 XML 放入xml.etree.ElementTree的另一个选项:

import io
f = io.StringIO(xmlstring)
tree = ET.parse(f)
root = tree.getroot()
Run Code Online (Sandbox Code Playgroud)

然而,它不会影响人们假设的 XML 声明(尽管ElementTree.write()tree需要它)。请参阅如何使用 xml.etree.ElementTree 编写 XML 声明