質問

会社の製品の構成ファイルを比較およびマージできるツールの作成を担当しました。構成は、XMLまたはURLエンコードされた文字列として保存されます。これらの差分を実行できるライブラリ、できれば商用ソフトウェアと互換性のあるライセンスを持つオープンソースを探しています。私たちのアプリはC ++で記述されているため、C ++ライブラリが最適ですが、COM経由でC ++に公開するラッパーを作成できるため、C#固有のライブラリを検討します。 3ウェイの差分が理想的ですが、2ウェイの差分は許容されます。 XMLを理解していれば、プラスになります(ドキュメントを変更することなくXMLノードを並べ替えることができるなど)。ライブラリの提案はありますか?私たちのフォーマットのセマンティックな知識を提供することを期待して、独自のdiffツールを書くことを検討すべきですか?

同様の質問のおかげで、私はすでにこのGoogleライブラリは本当に素晴らしいようですが、私はまだ探していますその他のオプション。また、HTML形式でdiffを出力できるようです(発見する前に存在していなかった<ins>および<del>タグを使用)。これは本当に便利ですが、統一されているようです。差分のみ。結果をWebブラウザーで表示する必要があり、おそらくブラウザーでもマージを行うためのインターフェースを作成する必要があります。ライブラリがこれらのタスクを支援できるとは思っていませんが、その上にこれを構築するのに適した形式で出力を生成する必要があります。現在、TortoiseMergeのラインに沿ったもの(統合されていない、横並びの差分)を想定していますが、ブラウザベースは除きます。これを提示する方法に関するヒント/トリック/デザインのアイデアも歓迎します。

役に立ちましたか?

解決

XMLを比較するには、まず正規化することをお勧めします。すべての要素をアルファベット順に並べ替えてから、元のドキュメントを表すが元の書式設定に依存しないtokens / xmlのストリームを生成します。 diffを実行した後、結果を解析して、追加/削除されたものを含むツリーを取得します。

他のヒント

Subversionには、Apacheソフトウェアライセンスに基づいてライセンスされたlibsvn_diffおよびlibsvn_deltaが付属しています。

こちらは、著者が半構造化データと呼ぶものをdiffできるC ++ライブラリです。 HTMLとXMLをうまく処理します。データはXMLであるため、プレーンテキストdiffの代わりにこれを使用することは非常に理にかなっています。これは、ファイルがマシンで生成される場合に特に当てはまります。

現在、このライブラリを使用して、Visual Studioプロジェクトファイルを比較するツールを構築しようとしています。これらは基本的にXMLファイルであり、Winmergeのような単純なdiffツールを使用するのは、Visual Studioが狂った並べ替えによってファイル全体をほとんどマックアップするため、非常に苦痛です。アイデアは、ある種の構造化されたdiffを実行して問題に対処することです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top