我有一些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。我怎么能把它作为文件保存到我的桌面?
答案 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)