2012/01/04

XMLのDIFF

仕事でXMLの比較ツールが必要になった。

しかし、めぼしいXML専用比較ツールは有料のものばかり。

TEXT比較ツールだと、XMLの使用上、正確な比較ができない。。。
(XMLのルール上、要素と属性の順序が常に同じである必要がないため)

てわけで、つくってみようかと思っている。

で、何で作るかだが。。。
最近、VSを使ってC#&WPFのしたらば掲示板参照ツールを作ったので、WPFは割と満足した(ぇ

なので、JavaとSwingでかっちょよくGUIアプリでも作ってみたいなぁと思った。


早速、GUI部分を調べたが、コードから作るのはとても面倒な事はよくわかっていて、それらしきフレームワークが何種類かあったが、使いこなすのが面倒そう。
てなわけで、NetBeansを使ってサクっとやろう、と決める。

次に比較ロジックだが、とりあえず、XMLをパースしてちゃんと比較するロジックを自力で作るのは大変そうなので、XMLを入力として、常に順序が同じXMLに編集するという仕様を考えた。
そうすれば、普通のDIFFで比較できるからね。

JavaでテキストのDIFFをとれるライブラリを探していたら、<a href="http://d.hatena.ne.jp/reiro/20080225/javadiff">こんな</a>記事を発見。
Java-DIFF?というライブラリで、一致か不一致で比較してくれるようだ。

まぁ、似ているは今回は気にしない方向でいこう。

とりあえず以下の仕様で作る方針にする。

・XMLは正確なもののみ(構文が間違っていない)
・親要素内、要素内の属性をソートする。
・ソートされたXMLの単純DIFFを取る。
・結果を表示

まぁ、そんなに困らなくても出来るだろうと思うが、楽しんでつくろうと思う。