如何使用Python将XML文件保存到磁盘?

15

我有一些使用xml.dom.minidom生成XML文本的Python代码。目前,我从终端运行它,并将结构化的XML作为结果输出。我希望它还能够生成一个XML文件并将其保存到我的磁盘上。应该如何实现?

这是我目前拥有的:

import xml
from xml.dom.minidom import Document
import copy


class dict2xml(object):
    doc     = Document()

    def __init__(self, structure):
        if len(structure) == 1:
            rootName    = str(structure.keys()[0])
            self.root   = self.doc.createElement(rootName)

            self.doc.appendChild(self.root)
            self.build(self.root, structure[rootName])

    def build(self, father, structure):
        if type(structure) == dict:
            for k in structure:
                tag = self.doc.createElement(k)
                father.appendChild(tag)
                self.build(tag, structure[k])

        elif type(structure) == list:
            grandFather = father.parentNode
            tagName     = father.tagName
            # grandFather.removeChild(father)
            for l in structure:
                tag = self.doc.createElement(tagName.rstrip('s'))
                self.build(tag, l)
                father.appendChild(tag)

        else:
            data    = str(structure)
            tag     = self.doc.createTextNode(data)
            father.appendChild(tag)

    def display(self):
        print self.doc.toprettyxml(indent="  ")

这只是生成 XML,我该如何将其保存为桌面文件?

2个回答

18
你可能想要在你的XML DOM树的根节点上使用Node.writexml()。这将把你的根元素和所有子元素写入一个XML文件,并在此过程中进行所有必要的缩进等操作。
参考文档:xml.dom.minidom的文档

Node.writexml(writer[, indent=""[, addindent=""[, newl=""]]])

将XML写入writer对象。writer对象应该具有与文件对象接口相匹配的write()方法。参数indent是当前节点的缩进。参数addindent是当前节点的子节点使用的增量缩进。参数newl指定用于终止换行的字符串。

对于文档节点,还可以使用额外的关键字参数encoding来指定XML头部的编码字段。

从2.1版本开始更改:添加了可选的关键字参数indentaddindentnewl以支持漂亮的输出。

从2.3版本开始更改:对于文档节点,还可以使用额外的关键字参数encoding来指定XML头部的编码字段。

用法类似于:

file_handle = open("filename.xml","wb")
Your_Root_Node.writexml(file_handle)
file_handle.close()

1
你具体尝试了什么?你编辑后的问题只包括将XML漂亮地打印到控制台的代码。它并没有包括你尝试使用writexml()的过程,因此我们无法帮助你修复它。请展示给我们你尝试使用writexml()的方式以及它为何无法正常工作(是否有错误信息?或者它没有按照你的意图正常工作?) - Li-aung Yip
2
以“wb”模式打开没有起作用,但是只使用“w”就可以了。 - Anthony Awuley

7

如果您想把XML作为字符串保存到文件中,可以阅读有关Python 文件的文章,并将其写入文件中。

xml = "<myxmldata/>"
f =  open("myxmlfile.xml", "wb")
f.write(xml)
f.close()

要从minidom节点获取xml字符串,您可以使用以下方法:
xml = Node.toxml()

或者您可以直接写入支持写入的对象,例如文件。
Node.writexml(f)

1
@Lucas Pereira - “文件”只是故事的一半。您需要1)创建和填充SimplXML对象,然后2)将对象写入文本文件。 Li-aung Yip讨论了如何做到这一点。 - paulsm4
@paulsm4 他说他已经在终端生成了XML输出。 - Anurag Uniyal
@Anurag Uniyal - 你最初的示例(在你编辑它之前),只有"f.write()"。我想强调给Lucas Pereira,他也需要像"Your_Root_Node.writexml(file_handle)"(就像Li-aung Yip在他的第一篇帖子中说的那样)或"Node.writexml(f)"(这只是在你编辑后添加的)。 - paulsm4

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