11 Stimmen

XML-Diff und -Zusammenführung

Ich glaube, ich habe ein ziemlich einzigartiges Problem zu lösen. Nun, ich kann nicht genug Informationen über Google finden. Also hier geht es,

Ich arbeite an einer Java EE SOA-Anwendung, die XML-Dokumente als XML mit Oracle XML DB speichert. Jedes Mal, wenn sich das XML ändert, erhöhe ich die Version und lege die vorherige Version in einer anderen Tabelle ab.

Die Anforderung ist nun, dass ich die Unterschiede zwischen 2 Versionen als XML speichern soll, anstatt das ganze XML-Dokument.

  1. Gibt es eine Java-Bibliothek, die XML-Vergleiche durchführen kann? (XMLUnit, ... ?)
  2. Gibt es ein Standard-XML-Schema für die Erfassung von XML-Unterschieden?
  3. Welche Transformationstechnologie kann ich verwenden, um die "Unterschiede" auf ein XML anzuwenden, um zwischen den Versionen hin und her zu gehen? (XSLT, Groovy, .... ?)

Ich danke Ihnen für Ihre Zeit.

10voto

Brian Clapper Punkte 24335

Bei meiner letzten Tätigkeit hatten wir ein ähnliches Problem: Wir mussten Änderungen, Einfügungen und Löschungen bestimmter Elemente zwischen zwei XML-Dateien erkennen. Bei den Dateien handelte es sich nicht um beliebige XML-Dateien; sie mussten unserer XSD entsprechen.

Unsere Lösung bestand darin, eine Art Mischsortierung zu implementieren: Parsen der Dateien (unter Verwendung eines SAX-Parsers, nicht eines DOM-Parsers, um beliebig große Dateien zu ermöglichen) und Speichern der geparsten Daten in separaten HashMaps. Dann verglichen wir die Inhalte der beiden Maps mit einer Art Merge-Sort-Algorithmus.

Je größer die Dateien wurden, desto größer wurde natürlich auch der Speicherbedarf, so dass ich schließlich eine FileHashMap-Klasse schrieb, die den Wertebereich der HashMap in Dateien mit wahlfreiem Zugriff verlegte. Diese Lösung war zwar theoretisch langsamer, ermöglichte es aber, unsere Vergleiche mit sehr großen Dateien durchzuführen, ohne dass es zu Thrashs oder OutOfMemoryError-Bedingungen kam. (Eine Version dieser FileHashMap-Klasse ist in dieser Bibliothek verfügbar: http://www.clapper.org/software/java/util/ )

Ich habe keine Ahnung, ob das, was ich gerade beschrieben habe, auch nur annähernd das ist, was Sie brauchen, aber ich dachte, ich erzähle es Ihnen, nur für den Fall.

Viel Glück!

9voto

bortzmeyer Punkte 32353

Nebenbei bemerkt: Es gibt jetzt ein Standardformat für XML-fähige "Patches", in RFC 5261 . Es gibt mindestens ein kostenloses Softwareprogramm, xmlpatch , die es umsetzt. Es ist in C geschrieben, Sie können es von Java aus aufrufen.

4voto

Yes - that Jake. Punkte 16190

Es gibt eine Reihe von Open-Source-XML-Diff-Tools, die in Java geschrieben sind und von denen Sie sich inspirieren lassen können. Eine Liste solcher Werkzeuge ist aquí .

1voto

austincheney Punkte 1069

Versuchen Sie es mit Pretty Diff. Es ist so konzipiert, dass es mit mehreren verschiedenen Erweiterungen der grundlegenden XML-Syntax arbeiten kann.

http://prettydiff.com/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X