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を生成するだけです。デスクトップにファイルとして保存するにはどうすればよいですか?
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()
_
python files について読んでください。文字列としてxmlを使用すると、ファイルに書き込むことができます。
xml = "<myxmldata/>"
f = open("myxmlfile.xml", "wb")
f.write(xml)
f.close()
Minidomノードからxml文字列を取得するには、次のいずれかを使用できます。
xml = Node.toxml()
または、書き込みをサポートするオブジェクトに直接書き込むことができます。ファイル
Node.writexml(f)