web-dev-qa-db-ja.com

PythonでXMLファイルをディスクに保存する方法は?

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を生成するだけです。デスクトップにファイルとして保存するにはどうすればよいですか?

10
Lucas Pereira

XMLDOMツリーのルートノードでNode.writexml()を使用することをお勧めします。これにより、ルート要素とすべての子要素がXMLファイルに書き込まれ、必要なすべてのインデントなどが実行されます。

_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()
_
15
Li-aung Yip

python files について読んでください。文字列としてxmlを使用すると、ファイルに書き込むことができます。

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

Minidomノードからxml文字列を取得するには、次のいずれかを使用できます。

xml = Node.toxml()

または、書き込みをサポートするオブジェクトに直接書き込むことができます。ファイル

Node.writexml(f)
6
Anurag Uniyal