忍者ブログ
雇われるだけの人生から目指せ独立、社会人2年目なゲーム脳SEのブログ。更新頻度=週2~3回。
[199]  [198]  [197]  [196]  [195]  [194]  [193]  [192]  [191]  [190]  [189
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

現在仕事で扱っているシステムは、外部のシステムとXMLで連携したりします。
そのXML電文にバグがあるんじゃないかということで、調査依頼が飛んできました。

昔の自分なら、帰ってきたXML電文を自分の目で比較したりdiffエディタに突っ込んで比較したりしていたことでしょう。しかし、目での比較は文章化しづらく説得力に欠ける(せいぜいスクリーンショットを取って並べる程度の資料しか作れない)ところがありますし、何より面倒です。
しかも今の私にはPythonと言う強い味方がいるのですから、PythonにXMLの解析をやらせましょう。
コマンドラインからファイル名を受け取って、DOMで解析し、特定の名前の要素の値だけを抜き出して列挙するプログラムをささっと書いてみます。

参考にしたページ一覧:
13.6 xml.dom -- 文書オブジェクトモデル (DOM) API
Python でUTF-8, shift_jis, euc_jpなど日本語を使う方法
xml.dom.minidom を用いた XML の取り扱い
Python備忘録 - mynote

ソースコードは↓こちら。
import sys
import codecs
from xml.dom.minidom import parse


def main():
#    for args in sys.argv:
#        print args
#
#    print 'asobiha kokomadeda! xml parse suruze!!'
#    xmlfile = codecs.open(sys.argv[1], 'r', 'shift_jis')
#    dom = parse(xmlfile)
    dom = parse(sys.argv[1])
    nodes_rcode = dom.getElementsByTagName('FareItemNo')
    for node in nodes_rcode:
        print node.firstChild.nodeValue
    
    dom.unlink()


if __name__ == "__main__":
    main()

たったの20行(本質的に意味があるのは4行!)で出来ました!
ファイルからの読み込み&パースもわずか1行です。
(Javaでつくるとこの部分だけで10行超えてしまいそうです)
Javascriptみたいに、getElementsByTagNameが使えるのが非常にうれしいですね。

注意するべき点は、xml.dom.minidom.parse()が、なぜかencoding="Shift_JIS"のXMLを読み込んでくれないことです。IANAにも登録されている由緒正しい?エンコードなのですが、うまくいかないものは仕方が無いので、XMLの文字エンコードをUTF-8に変換してencoding="UTF-8"を指定すればうまくいきました。

あとは、コマンドラインから起動して、結果をテキストファイルに>リダイレクトしてやればOK!
python abesi.py hogehoge.xml > hogehoge.txt
いやー、スクリプト言語はストレス無く使えていいですね。
今回の作業で一番ストレスを感じたのがDOS窓のあまりのシェルの弱さ(TABキーによる入力補完がLinuxのbashに比べると天地の差)だったぐらいですから。

こういうちょっとしたスクリプトをささっと書けると、なんだかプログラマレベルが上がった気になれて自己満足度アップです。
PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
カレンダー
06 2017/07 08
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
ブログ内検索
最新コメント
[11/13 DSLR-A850]
[08/29 逆援助交際]
[08/23 クンニ]
[08/22 熟女]
[08/19 痴漢]
はてなブックマーク
プロフィール
HN:
akisute
性別:
男性
職業:
システムエンジニア
趣味:
ゲーム・東方・ニコ動。あと散歩。
バーコード
推奨環境

横幅900px以上、Firefox 3, Safari 3, Opera 9.5, Chrome 0.2以上。IE7ギリギリ対応。IE6未対応。

忍者ブログ [PR]