xml.etree.ElementTree.Element' object 没有属性 'write'

xml.etree.ElementTree.Element' object has no attribute 'write'

我想读取 XML 字符串,对其进行编辑并将其保存为 XML 文件。

但是当我这样做时,我得到了标题中提到的错误 .write()

我发现当您使用 ElementTree.fromstring(string) 读取 XML 字符串时,它会创建一个 ElementTree.Element 而不是 ElementTree 本身。 Element 没有 write 方法,但 ElementTree 有。

如何将元素写入 XML 文件?或者如何创建 ElementTree 并将我的元素添加到其中,然后使用 .write 方法?

I found out that when you read a xml string using ElementTree.fromstring(string) it will actually create an ElementTree.Element and not a ElementTree itself.

是的,您得到了 top-level 元素(也称为 "document element")。

An Element has no write method but the ElementTree does.

ElementTree constructor signature 是这样的:

class xml.etree.ElementTree.ElementTree(element=None, file=None)

因此非常简单:

import xml.etree.ElementTree as ET

doc = ET.fromstring("<test>test öäü</test>")

tree = ET.ElementTree(doc)
tree.write("test.xml", encoding="utf-8")

编写 XML 文件时应始终指定编码。大多数时候,UTF-8 是最佳选择。

如果这有助于任何人在尝试使用 ElementTree 编写 xml 文件时收到这条不清楚的错误消息,并且在上面花费了太多时间(就像我所做的那样):

File "/usr/lib/python3.5/xml/etree/ElementTree.py", line 788, in _get_writer
write = file_or_filename.write
AttributeError: 'str' object has no attribute 'write'

...在我的例子中,这仅仅是因为我试图写入 xml 文件的目录路径不存在!例如:

tree.write("/FolderDidNotExist/test.xml", encoding="utf-8")

一个简单的 mkdir /FolderDidNotExist 就成功了。没有更多的错误。 (当然,这个错误消息可能会用到一些 "love" 所以我把它贴在这里以防我再次忘记它的意思 [我已经做过] 并且需要再次 google 这个)