我读取了一个xml字符串,对其进行了编辑,然后希望再次将其作为xml文件输出。
但是当我.write()
我发现,当您使用ElementTree.fromstring(string)
读取xml字符串时,它将实际上创建一个ElementTree.Element
而不是一个ElementTree
本身。元素没有写方法,但元素树有。
我的问题是:首先,如何将元素写入xmlfile?或如何创建ElementTree并向其中添加我的Element,然后使用.write
方法?
第二,两种解决方案中的任何一种都有什么后果?
答案 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是最佳选择。