Python ElementTree返回元素而不是ElementTree

Python ElementTree返回元素而不是ElementTree,python,xml,python-3.x,elementtree,Python,Xml,Python 3.x,Elementtree,我正在尝试从字符串构建ElementTree。当我执行以下操作时(如中所述),我得到的是一个元素而不是ElementTree: 我明白了 AttributeError:'xml.etree.ElementTree.Element'对象没有属性'getroot' 换句话说,companyTree是一个元素,而不是一个ElementTree。根据中的公认答案,我应该得到一棵ElementTree。API改变了吗?现在如何从字符串中获取ElementTree?谢谢 请注意,关于这个问题的更多信息,请参

我正在尝试从字符串构建ElementTree。当我执行以下操作时(如中所述),我得到的是一个元素而不是ElementTree:

我明白了

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

换句话说,companyTree是一个元素,而不是一个ElementTree。根据中的公认答案,我应该得到一棵ElementTree。API改变了吗?现在如何从字符串中获取ElementTree?谢谢


请注意,关于这个问题的更多信息,请参见这篇文章。我有一些使用
parse()
的旧代码。我重构为使用
fromstring()
,导致了相同的错误。 根据你的参考资料,我可以总结一下这里发生了什么;我相信这将有利于人们得到这个特定的错误。其他文章直接处理API本身,所以我不认为它们是重复的。< /P> 所以,首先要解决这个问题。你说的问题是相关的,这是正确的,但是我不认为公认的答案是声称
fromstring()
应该返回
ElementTree
。相反,这个答案的作者是说,在问题的上下文中,字符串相当于一个完整的XML文档,而不是一个片段,因此将其转换为
ElementTree

当您使用ElementTree.fromstring()时,您得到的基本上是树的根,因此如果您创建一个像这样的新树ElementTree.ElementTree(根),您将得到您要查找的树

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

from xml.etree.ElementTree import fromstring, ElementTree
tree = ElementTree(fromstring(<your_xml_string>))
from xml.etree.ElementTree导入fromstring,ElementTree
tree=ElementTree(fromstring())
这一方法得到了you posted的证实,它链接了图书馆作者的一篇老文章,他在文章中声明(我也解释)这不是一个设计怪癖,而是一个特性。我们期望像
parse()
这样的结构设计用于处理完整的文档,而
fromstring()
则设计用于处理片段文档。在后一种情况下,我们程序员必须解决歧义,并通知库我们希望字符串是一个完整的文档


因此,就我的用例而言,我的XML字符串中有一个完整的文档,并且想要
ElementTree
特性,所以我将
fromstring()
调用包装在
ElementTree
中,如上面的示例所示。

以及
root
companyTree
之间的关系如何?是的,这有点不清楚。companyTree=root(传递给具有root的方法)。已编辑。我无法重现错误。执行
print(companyTree.getroot())
打印出
。您完全正确。传递给ElementTree的函数中存在错误,导致上述异常。谢谢。非常有用的答案!我不知道为什么没有其他的得票。是的,这个答案节省了我很多时间。很详细的解释!
print(companyTree.getroot())
from xml.etree.ElementTree import fromstring, ElementTree
tree = ElementTree(fromstring(<your_xml_string>))