发布
社区首页 >问答首页 >ElementTree返回元素而不是ElementTree

ElementTree返回元素而不是ElementTree
EN

Stack Overflow用户
提问于 2015-11-27 17:52:27
回答 1查看 13.3K关注 0票数 13

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

代码语言:javascript
代码运行次数:0
复制
companyTree = ElementTree.ElementTree(ElementTree.fromstring('<companies></companies>'))

如果我做了

代码语言:javascript
代码运行次数:0
复制
print(companyTree.getroot())

我得到了

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

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

请注意,在Python ElementTree: ElementTree与根元素中有更多关于这个问题的内容。

EN

回答 1

Stack Overflow用户

发布于 2017-06-11 11:21:54

这只也咬了我。我有一些使用parse()的旧代码。我重构为使用fromstring(),导致了同样的错误。根据您的参考资料,我可以总结这里发生的事情;我相信这将有利于人们得到这个特定的错误。其他文章直接处理API本身,因此我不认为它们是重复的。

所以,首先要解决这一点问题。您说的问题是相关的,这是正确的,但是我不认为公认的答案是声称fromstring()应该返回一个ElementTree。相反,这个答案的作者说,在问题的上下文中,字符串等价于一个完整的XML文档,而不是一个片段,因此将其转换为ElementTree是合适的

当您使用ElementTree.fromstring()时,您要返回的基本上是树的根,所以如果您创建了一个像这个ElementTree.ElementTree(根)这样的新树,那么您将得到您想要的。

在他的代码样本中,他就是这样做的:

代码语言:javascript
代码运行次数:0
复制
from xml.etree.ElementTree import fromstring, ElementTree
tree = ElementTree(fromstring(<your_xml_string>))

这种方法被您发布的二次参考所证实,它链接了库的作者的一篇旧文章,他在文章中声明(我是这么说的),这不是一个设计怪癖,而是一个特性。我们的期望是,像parse()这样的构造是为处理完整的文档而设计的,而fromstring()则是设计用来处理片段文档的。在后一种情况下,我们程序员必须解决歧义,并通知库,我们希望字符串是一个完整的文档。

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

票数 64
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33962620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档