XMLの制御とか。

XMLを読み込んでノードを足して出力する。見た目を気にしなければxml.domにXMLを食わせて吐かせるぐらいは出来るんだけど、writexmlとかtoprettyxmlとか使うたびにインデントと改行がどんどん増えていったり、エレメントの順番がソートされて見づらくなったりするのは我慢がならないと思った。インデントと改行の整形は、頭からループして空白のテキスト要素をどんどん削除してあげないといけないのだろうか。それはあまりにコストが高いように思う。それで結局はファイルの内容を単にテキストとしてバッファに貯めて、必要な変更を加えたら一気に書き戻すのが簡単だし標準ライブラリだけで出来るからいいという面白くもなんとも無い結果になった。なんだかいろいろ足りないと思われるXML読み書きのサンプルコード。

# -*- coding: utf_8 -*-

testarg = 'C:\Python\projcet\command.xml'

from xml.dom.minidom import parse
import os.path

# XML Writing sample

dom = parse('command.xml')

elms = dom.getElementsByTagName('command-group')
node_cmd = elms[0]
new_node = dom.createElement('shellexec')

new_node.setAttribute('name', os.path.basename(testarg))
new_node.setAttribute('file', testarg)
new_node.setAttribute('directory', os.path.dirname(testarg))
new_node.setAttribute('param', '%param')

node_cmd.appendChild(new_node)

f = file('command.xml', 'w+')
dom.writexml(writer=f, indent='    ',addindent='    ', newl='\n', encoding='utf-8')
f.close()

dom.unlink()