Pages

May 23, 2004

XMLの差分を取得したいだけなのに・・・

2つのXMLがあってその変更点をリストアップしたい時の選択について
もちろんdiffコマンド一発でファイルレベルの差分をとることはできますが、XMLの構造を含めて変更点をリストアップしたいとなると急に面倒になったのでここにメモっとく
(XMLとか触るのは初めてです。おかしいところが多々あるはず。もっと簡単な方法があったら教えてください)
1、Unix+Perlのプラットフォームのとき
diffmkというツールがあります。
2、Windows+.net frameworkを使うとき
XmlDiffPatchクラスを使います。要インストール。


1、Unix+Perlのプラットフォームのとき
DiffMkをここからダウンロード。
以下のモジュールを事前に用意します。
XML::Parser,XML::DOM,Algorithm::Diff
2、Windows+.net frameworkを使うとき
マイクロソフトがXmlDiffPatchというツールを用意してくれてます。
ここからダウンロード。
プログラムをインストールすると同時にヘルプもコピーされます。
C#から使う場合のサンプルは以下のとおり
using System;
using System.Xml;
using System.IO;
using Microsoft.XmlDiffPatch;
namespace TestCompare
{
class Class1
{
static void Main()
{
XmlDiff myDiff = new XmlDiff();
XmlWriter diffgramWriter = new XmlTextWriter( new StreamWriter( "diffgram.xml" ) );
myDiff.IgnorePI = true;
myDiff.IgnoreComments = true;
bool bSame = myDiff.Compare("Source.xml", "Changed.xml", false, diffgramWriter);
diffgramWriter.Close();
}
}
}
ここにDiffXmlを使ったサンプルサイトらしきものがあるのですが少なくともここ2日、いくら試してもちゃんと動かないです。
ちなみに今回はC#でのコーディングが前提だったのでdiffmkは実際に使ってません。
XmlDiffPatchは次の.net frameworkでSystem.XML配下に標準で入っていることを期待!