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

时间:2012-03-28 17:21:19

标签: python xml file

我有一些python代码用xml.dom.minidom生成一些XML文本。现在,我从终端运行它,结果输出一个结构化的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 个答案:

答案 0 :(得分:13)

您可能希望在XML DOM树的根节点上使用Node.writexml()。这会将您的根元素和所有子元素写入XML文件,并在此过程中执行所有必要的缩进等。

See the documentation for xml.dom.minidom:

  

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

     

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

     

对于Document节点,可以使用其他关键字参数编码   用于指定XML标头的编码字段。

     

版本2.1中更改:可选关键字参数缩进,   addindent和newl被添加以支持漂亮的输出。

     

版本2.3中已更改:对于“文档”节点,还有一个附加关键字   参数编码可用于指定XML的编码字段   报头中。

用法有点像:

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

答案 1 :(得分:6)

阅读python files,如果xml为字符串,则可以将其写入文件,例如。

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

要从minidom节点获取xml字符串,您可以使用

xml = Node.toxml()

或者您可以直接写入支持写入的对象,例如一个文件

Node.writexml(f)