xml.etree.ElementTree.Element'对象没有属性'write'如何从中写入xml

时间:2019-06-20 08:59:54

标签: python xml elementtree

我读取了一个xml字符串,对其进行了编辑,然后希望再次将其作为xml文件输出。

但是当我.write()

时,标题中出现提到的错误

我发现,当您使用ElementTree.fromstring(string)读取xml字符串时,它将实际上创建一个ElementTree.Element而不是一个ElementTree本身。元素没有写方法,但元素树有。

我的问题是:首先,如何将元素写入xmlfile?或如何创建ElementTree并向其中添加我的Element,然后使用.write方法?

第二,两种解决方案中的任何一种都有什么后果?

2 个答案:

答案 0 :(得分:1)

以防万一这有助于任何人在尝试使用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就可以了。没有更多的错误。 (当然,此错误消息可能会使用一些“爱”,所以我在此处发布此消息,以防万一我再次忘记了它的含义[已完成],并且需要再次用Google搜索)

答案 1 :(得分:0)

  

我发现,当您使用ElementTree.fromstring(string)读取xml字符串时,它将实际上创建一个ElementTree.Element而不是一个ElementTree本身。

是的,您可以返回顶级元素(也称为“文档元素”)。

  

元素没有write方法,但ElementTree有。

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是最佳选择。