Python如何从字符串源中解析XML ElementTree?

199

ElementTree.parse方法读取文件,如果我已经有了XML数据的字符串,我该如何使用它?

也许我缺少某些东西,但肯定有一种方法可以在不将字符串写入文件并再次读取的情况下使用ElementTree。

xml.etree.elementtree

4个回答

338
你可以将文本解析为字符串,从而创建一个 Element,并使用该 Element 创建一个 ElementTree。
import xml.etree.ElementTree as ET
tree = ET.ElementTree(ET.fromstring(xmlstring))

我刚遇到了这个问题,虽然文档很完整,但在parse()fromstring()方法的使用区别上不是很直观。


11
第二行代码可以简单地写成root = ET.fromstring(xmlstring),其等价于ET.parse('file.xml').getroot()。详见https://docs.python.org/3.6/library/xml.etree.elementtree.html#parsing-xml。 - Anton Tarasenko
8
正如OP所述,这个想法是生成一个ElementTree,而不是一个Element。这是非常有用的,例如当你想使用ElementTree.write()时。@Anton - batbrat
如果有人感兴趣,这也适用于 lxml - Louie Bafford

115
如果你正在使用xml.etree.ElementTree.parse从文件中解析,则可以使用xml.etree.ElementTree.fromstring获取文档的根Element。通常情况下,您实际上并不需要一个ElementTree

参见xml.etree.ElementTree


50
问题在于ElementTree.fromstring生成的是一个元素(element),而不是一个完整的ElementTree!有人知道如何解决这个问题吗? - Samuel Lampa
5
和@SamuelLampa提到的问题相同。我不是ElementTree,因此无法执行"getroot()"操作。 - Siddharth Menon
32
参考dgassaway的回答,使用ET.ElementTree(ET.fromstring(xmlstring))来解析XML字符串。 - Colin Pickard
7
正确答案请参考 @dgassaway 提供的答案。 - 2.718
@SiddharthMenon,你不需要getroot(),fromstring已经给你了根。 - melMass
显示剩余3条评论

20
你需要使用xml.etree.ElementTree.fromstring(text)
from xml.etree.ElementTree import XML, fromstring
myxml = fromstring(text)

1
是的,但这不是一个 ElementTree,而是根 Element。这个 API 是不同的,不能做所有相同的事情。 - rjurney

12

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接