2012-03-28 52 views
5

我有一些python代碼,用xml.dom.minidom生成一些XML文本。現在,我從終端運行它,併爲其輸出結構化的XML。我希望它也能生成一個XML文件並將其保存到我的磁盤。這怎麼可能完成?如何使用python將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。我怎麼能把它作爲文件保存到我的桌面?

回答

10

你可能想你的XML DOM樹的根節點上使用Node.writexml()。這會將你的根元素和所有的子元素寫入一個XML文件,一路做所有必要的縮進等。

See the documentation for xml.dom.minidom:

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

XML寫入作家對象。作者應該有一個與文件對象接口相匹配的方法write()indent 參數是當前節點的縮進。 addindent 參數是用於當前節點的子節點的遞增縮進。 newl參數指定用於終止換行符的字符串 。

對於文檔節點,附加的關鍵字參數編碼可以是 ,用於指定XML標頭的編碼字段。

在版本2.1中更改:添加了可選的關鍵字參數indent, addindent和newl以支持漂亮的輸出。

版本2.3中已更改:對於文檔節點,可以使用附加關鍵字 參數編碼來指定XML 標頭的編碼字段。

用法會有點像:

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

仍然無法管理它工作 – 2012-03-29 20:19:09

+1

你究竟是什麼試一下?你編輯的問題只包含了將XML打印到控制檯的代碼,它不包括你使用'writexml()'的嘗試,所以我們無法幫你解決這個問題。請告訴我們你是如何嘗試使用'writexml()'以及它如何失效(是否有錯誤信息?或者它沒有按照你的意圖工作?) – 2012-03-30 01:19:37

+0

在模式「wb」中打開沒有爲我工作,但只是「w」工作 – 2017-12-08 03:35:24

6

閱讀關於python files,如果您將xml作爲字符串,您可以將其寫入文件,例如

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

要從minidom命名節點獲得XML字符串既可以使用

xml = Node.toxml() 

,或者您可以直接寫入到支持例如寫對象文件

Node.writexml(f) 
+0

你錯過了引號那裏。 ;) – 2012-03-28 17:41:38

+0

@Lucas Pereira - 「檔案」只有這個故事的一半。您需要1)創建並填充SimplXML對象,然後2)將對象寫入文本文件。 Li-aung Yip討論如何。 – paulsm4 2012-03-28 17:43:41

+0

@ paulsm4他說他已經生成了xml輸出到終端 – 2012-03-28 18:13:44