pythonの内部表現からxmlへの出力
主に使うのは,etreeオブジェクト.これは標準で入っているモジュール(のはず)なので,一般的な話ができるはず.
基本的な書き方は
DrunkBoarder · yuki_B's web site
XML ドキュメントを作成する - Python Module of the Week
を見りゃいいのだが,細かい所の補足だけ.
作成したxmlツリーのオブジェクトを文字列に書き出すには,xml.etree.ElementTree.tostring(xmlのroot)を使えばよい.が,標準では文字コードがascii(たぶん)の上に,すべてが一行のxmlが生成されてしまう.
まず,文字コードの問題は,引数にencoding='utf-8'と記述すれば,解決.
次に,すべてが一行でつながるxmlに対しては,こんなことをしてやる
from xml.etree import ElementTree from xml.dom import minidom def prettify(elem): """Return a pretty-printed XML string for the Element. """ rough_string = ElementTree.tostring(elem, 'utf-8') reparsed = minidom.parseString(rough_string) return reparsed.toprettyxml(indent=" ")
from Pretty print xml with python - indenting xml.
この関数が何をやっているか?というと,
- 通常と同じくtostringメソッドで一行つなぎのxmlを作成する.
- minidomのminidom.parseStringメソッドで解析させる
- reparsed.toprettyxml(indent=" ")で整形を行う
という流れ.
一度,文字列にしたものを解析して,もう一度文字列にするっていうのは,無駄な気もするけど...ま,いっか