【问题标题】:xml.etree.ElementTree.Element' object has no attribute 'write'xml.etree.ElementTree.Element' 对象没有属性 'write'
【发布时间】:2019-06-20 08:59:54
【问题描述】:

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

但是,当我执行 .write() 时,我在标题中遇到了上述错误

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

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

【问题讨论】:

    标签: python xml elementtree


    【解决方案1】:

    我发现当您使用 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 是最好的选择。

    【讨论】:

    • 谢谢。这行得通!不知道为什么我自己没有找到这个。
    【解决方案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 就成功了。没有更多的错误。 (当然,这个错误信息可能会使用一些“爱”,所以我在这里发布这个信息,以防我再次忘记它的含义[我已经做过]并且需要再次谷歌搜索)

    【讨论】:

    • 你为我节省了很多时间!
    猜你喜欢
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2018-07-10
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多