"xml.etree.ElementTree.Element"对象没有"write"属性

5

我想读取一个XML字符串,编辑它并保存为XML文件。

然而,当我执行.write()时,会出现标题中提到的错误。

我发现使用ElementTree.fromstring(string)读取XML字符串时,它将创建一个ElementTree.Element而不是ElementTree。元素没有写入方法,但ElementTree有。

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

2个回答

12
我发现当你使用ElementTree.fromstring(string)读取xml字符串时,实际上会创建一个ElementTree.Element而不是ElementTree本身。是的,你会得到顶层元素(也称为“文档元素”)。
一个元素没有write方法,但ElementTree有。 ElementTree构造函数签名如下:ElementTree (element=None, file=None)
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是最好的选择。


谢谢。这个有效!不确定为什么我自己没有找到它。 - user180146

2

如果有人在尝试使用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就搞定了。没有错误了。(当然,这个错误信息可能需要一些“关爱”,所以我在这里发布,以防我再次忘记它代表什么[我已经忘了],需要再次谷歌)


你节省了我很多时间! - mokko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接