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