11

解決すべきかなりユニークな問題があると思います。まあ、私はGoogleを使って十分な情報を見つけることができません。ということで、

私は、Oracle XML DB を使用して XML ドキュメントを XML として格納する Java EE SOA アプリケーションに取り組んでいます。XML が変更されるたびに、バージョンをインクリメントし、以前のバージョンを別のテーブルにスローします。

現在の要件は、XML ドキュメント全体ではなく、2 つのバージョンの違いを XML として保存する必要があるということです。

  1. XML 比較を実行できる Java ライブラリはありますか? (XMLユニット、...?)
  2. XML の違いをキャプチャするための標準 XML スキーマはありますか?
  3. 「違い」を XML に適用してバージョン間を行き来するには、どの変換テクノロジを使用できますか? (XSLT、Groovy、.... ?)

お時間をいただきありがとうございます。

4

4 に答える 4

10

私の最後の仕事でも、同様の問題がありました。2つのXMLファイル間の特定のアイテムの変更、挿入、および削除を検出する必要がありました。ファイルは任意のXMLではありませんでした。彼らは私たちのXSDに従わなければなりませんでした。

私たちの解決策は、一種のマージソートを実装することでした。ファイルを解析し(DOMパーサーではなくSAXパーサーを使用して、任意の大きなファイルを許可します)、解析されたデータを個別のHashMapに格納します。次に、マージソートタイプのアルゴリズムを使用して、2つのマップの内容を比較しました。

当然、ファイルが大きくなるほど、メモリの負荷が高くなるため、最終的には、HashMapの値スペースをランダムアクセスファイルにプッシュするFileHashMapクラスを作成しました。理論的には低速ですが、このソリューションにより、スラッシングやOutOfMemoryError条件なしで、非常に大きなファイルで比較を行うことができました。(そのFileHashMapクラスのバージョンは、次のライブラリで入手できます:http ://www.clapper.org/software/java/util/ )

私が今説明したことがあなたが必要としているものに少しでも近いかどうかはわかりませんが、念のためにそれを共有したいと思いました。

幸運を。

于 2009-01-10T02:22:56.413 に答える
8

補足: RFC 5261には、XML 対応の「パッチ」の標準形式が用意されています。それを実装するフリー ソフトウェア プログラムxmlpatchが少なくとも 1 つあります。C で書かれているので、Java から呼び出すことができます。

于 2009-01-12T09:25:14.127 に答える
4

Java で書かれたオープンソースの XML diff ツールはいくらでもあります。そのようなツールのリストの 1 つがここにあります

于 2009-01-09T22:43:29.510 に答える
1

Pretty Diff を使用してみてください。基本的な XML 構文でいくつかの異なる拡張機能を使用するように設計されています。

http://prettydiff.com/

于 2011-12-10T13:45:21.510 に答える