gpt4 book ai didi

python - ElementTree 返回元素而不是 ElementTree

转载 作者:数据小太阳 更新时间:2023-10-29 02:15:03 24 4
gpt4 key购买 nike

我正在尝试从字符串构建ElementTree。当我执行以下操作时(如 Python ElementTree: Parsing a string and getting ElementTree instance 中所述),我得到一个 Element 而不是 ElementTree:

companyTree = ElementTree.ElementTree(ElementTree.fromstring('<companies></companies>'))

如果我这样做

print(companyTree.getroot())

我明白了

AttributeError: 'xml.etree.ElementTree.Element' object has no attribute 'getroot'

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

请注意,Python ElementTree: ElementTree vs root Element 中有关于此问题的更多信息

最佳答案

这个也咬了我。我有一些使用 parse() 的旧代码。我重构为使用 fromstring(),导致同样的错误。 根据您的引用资料,我可以总结一下这里发生的事情;我相信这对于遇到此特定错误的人来说是有益的。其他文章直接涉及 API 本身,因此我不会认为它们是重复的。

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

When you use ElementTree.fromstring() what you're getting back is basically the root of the tree, so if you create a new tree like this ElementTree.ElementTree(root) you'll get you're looking for.

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

from xml.etree.ElementTree import fromstring, ElementTree
tree = ElementTree(fromstring(<your_xml_string>))

second reference 证实了这种方法你发布了,它链接了图书馆作者的一篇旧文章,他在文章中声明(我解释)这不是设计怪癖,而是一个功能。期望像 parse() 这样的结构设计用于处理完整的文档,而 fromstring() 设计用于处理片段 文档。正是在后一种情况下,我们程序员必须解决歧义并通知库我们期望该字符串是一个完整的文档。

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

关于python - ElementTree 返回元素而不是 ElementTree,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33962620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com