none
MSXMLを使って2つのファイルを比較する簡単な方法はありますか RRS feed

  • 質問

  • Windows XP VS2005 C++を使っています。

    2つのxmlファイルを比較して同じかどうかのチェックをしたいのですが、

    MSXMLにこのようなクラスはないのでしょうか。

    MicrosoftでXMLDiffなるものがあってそれでできると伺ったものの、.Netでしか使えないようでがっかりでした。

    何か今の開発環境で簡単にファイルを比較出来る方法がありましたら教えてください。

    2012年2月29日 15:50

回答

  • どう「同じかどうかチェックをしたい」のですか? XMLファイルとしてではなく、バイナリファイルとしてオープンして1バイトずつ比較するのではダメなんですか?

    バイナリ比較ではなく、例えばXMLコメントの有無は同一視するとかとか、どこまで同じとみなすか質問者さんの中で何等かの考えがあるのでしょうか。もしそうであれば、その考え通りの比較ロジックをコードとして記述するしかないです。

    • 回答の候補に設定 佐祐理 2012年3月4日 13:14
    • 回答としてマーク 山本春海 2012年3月9日 7:52
    2012年2月29日 20:42
  • 見つかりませんね。
    佐祐理さんの発言の繰り返しになってしまいますが、まず、

     1.「2つのxmlファイルが同一である」ことの定義

    を明確にしなければなりません。ざっぱな分類ですが、
    ちょっと思いつくままあげても

     2.バイナリレベルで全てのByteが順列として一致する。
     3.文字列として認識できる部分が全て一致する。
     4.全てのノード(エレメント)の名称と構造が一致する。

    くらいは考えられますよね。2.、3.については、
    「fc」コマンドでも、ある程度調べられますが、
    2.については意味が単純なため、コードしてもたいしたことは
    ありません。自分も作りました。
    4.の場合はコードする必要があるでしょう。ファイルAで見つかった
    エレメントをファイルBで検索していく形が想像できますね。
    3.は以外に難しいのですが、Windiff.exeの動作を参考に
    できるかもしれません。

    • 回答としてマーク 山本春海 2012年3月9日 7:52
    2012年3月1日 1:07
  • バイナリファイルとしてオープンして1バイトずつ比較するのではダメなんですか?
    • 回答の候補に設定 佐祐理 2012年3月4日 13:14
    • 回答としてマーク 山本春海 2012年3月9日 7:52
    2012年3月1日 21:42

すべての返信

  • どう「同じかどうかチェックをしたい」のですか? XMLファイルとしてではなく、バイナリファイルとしてオープンして1バイトずつ比較するのではダメなんですか?

    バイナリ比較ではなく、例えばXMLコメントの有無は同一視するとかとか、どこまで同じとみなすか質問者さんの中で何等かの考えがあるのでしょうか。もしそうであれば、その考え通りの比較ロジックをコードとして記述するしかないです。

    • 回答の候補に設定 佐祐理 2012年3月4日 13:14
    • 回答としてマーク 山本春海 2012年3月9日 7:52
    2012年2月29日 20:42
  • 見つかりませんね。
    佐祐理さんの発言の繰り返しになってしまいますが、まず、

     1.「2つのxmlファイルが同一である」ことの定義

    を明確にしなければなりません。ざっぱな分類ですが、
    ちょっと思いつくままあげても

     2.バイナリレベルで全てのByteが順列として一致する。
     3.文字列として認識できる部分が全て一致する。
     4.全てのノード(エレメント)の名称と構造が一致する。

    くらいは考えられますよね。2.、3.については、
    「fc」コマンドでも、ある程度調べられますが、
    2.については意味が単純なため、コードしてもたいしたことは
    ありません。自分も作りました。
    4.の場合はコードする必要があるでしょう。ファイルAで見つかった
    エレメントをファイルBで検索していく形が想像できますね。
    3.は以外に難しいのですが、Windiff.exeの動作を参考に
    できるかもしれません。

    • 回答としてマーク 山本春海 2012年3月9日 7:52
    2012年3月1日 1:07
  • そうですか。。。

    xmlファイルに変更があるかどうか、つまり変更中と変更前で変更があるかどうかを見たいだけなので、

    何かコマンドを1つキックすると結果が返る・・・という方法があればいいなぁと思った次第です。

    2012年3月1日 15:18
  • バイナリファイルとしてオープンして1バイトずつ比較するのではダメなんですか?
    • 回答の候補に設定 佐祐理 2012年3月4日 13:14
    • 回答としてマーク 山本春海 2012年3月9日 7:52
    2012年3月1日 21:42
  • それでやってみようと思います。

    2012年3月4日 11:56