ElementTree返回Element而不是ElementTree

ElT*_*966 3 python xml elementtree python-3.x

我正在尝试从字符串构建ElementTree.当我执行以下操作时(如Python ElementTree中所述:解析字符串并获取ElementTree实例),我得到一个Element而不是ElementTree:

companyTree = ElementTree.ElementTree(ElementTree.fromstring('<companies></companies>'))
Run Code Online (Sandbox Code Playgroud)

如果我做

print(companyTree.getroot())
Run Code Online (Sandbox Code Playgroud)

我明白了

AttributeError:'xml.etree.ElementTree.Element'对象没有属性'getroot'

换句话说,companyTree是Element而不是ElementTree.根据1中接受的答案,我应该得到一个ElementTree.API有变化吗?我如何从字符串中获取ElementTree?谢谢.

请注意,Python ElementTree中有更多关于此问题:ElementTree与root元素

kil*_*ush 17

这也是我的一点.我用了一些旧的代码parse().我重构使用fromstring(),导致相同的错误.根据您的参考资料,我可以总结一下这里发生了什么; 我相信这对于得到这个特定错误的人来说是有益的.其他文章直接涉及API本身,所以我不认为它们是重复的.

所以,首先要解决这一点.你说的问题是正确的,但我不认为接受的答案是提出fromstring()应该归还的索赔ElementTree.相反,这个答案的作者是说在这个问题的背景下的字符串等同于一个完整的XML文档,而不是一个片段,所以它是适当的将其转换为ElementTree:

当你使用ElementTree.fromstring()时,你得到的东西基本上就是树的根,所以如果你创建一个像这个ElementTree.ElementTree(root)这样的新树,你就会得到你正在寻找的东西.

在他的代码示例中,他做到了这一点:

from xml.etree.ElementTree import fromstring, ElementTree
tree = ElementTree(fromstring(<your_xml_string>))
Run Code Online (Sandbox Code Playgroud)

你发布的第二个参考资料证实了这种方法,它引用了图书馆作者的一篇旧文章,他在文章中指出(我解释)这不是一个设计怪癖,它是一个特征.期望是类似parse()的结构被设计为使用完整的文档,并且fromstring()被设计为使用片段文档.正是在后一种情况下,我们程序员必须解决歧义并告知库我们希望字符串是一个完整的文档.

所以,就我的用例而言,我的XML字符串中有一个完整的文档,并且需要这些ElementTree功能,因此我将fromstring()调用包装ElementTree在上面的示例中.

  • 非常有用的答案!不知道为什么没有其他赞成票。 (2认同)