Zeilenlängentolerantes XML-Diff

13

Ich habe mir die Antworten auf diese Frage angeschaut und leider hat mir bisher keiner geholfen.

Die zweite Ausgabe von C # in Depth ist jetzt in Kopie. Ich möchte in der Lage sein zu sehen, was der Kopiereditor wirklich leicht gemacht hat, damit ich seine Änderungen ablehnen oder akzeptieren kann.

Wir verwenden eine modifizierte Form von Docbook, aber ich freue mich, dass ich mir die unformatierte XML-Quelle anschaue. Bislang alles in Ordnung - mit der Ausnahme, dass der Zeilenumbruch geändert werden kann, wenn der Kopiereditor eine Änderung vornimmt. Also etwas, das früher lautete:

<para>Foo bar baz
 second line</para>

liest jetzt

<para>Foo bar grontle
 baz second line</para>

Jetzt ist die wirkliche Änderung hier das Einfügen von "grontle". Es ist mir egal, dass "baz" von der ersten in die zweite Zeile verschoben wurde, aber alle Diff-Tools, die ich gesehen habe, tun dies.

Mir ist klar, dass eine Option darin besteht, das gesamte Dokument (oder möglicherweise auch nur ganze Absätze) in einzelne Zeilen umzuformatieren ... aber das ist dann wirklich schwer zu lesen, da die Diff-Tools bei der Anzeige keinen Zeilenumbruch ausführen.

Ich bin sicher, dass ich mit den Tools zurechtkomme , aber wenn jemand etwas besseres weiß, würde ich mich sehr freuen, davon zu hören. Ich vermute, meine Verlage würden auch.

(Ich habe das Windows-Tag hier eingefügt, da es unbedingt unter Windows verfügbar sein muss. Ich würde gerne Informationen zu anderer Software als Windows erhalten, aber nur für den Fall, dass ich bei der Erstellung unter Windows helfen könnte.)

Jon Skeet
quelle

Antworten:

9

Sieht so aus, als würde SourceGear DiffMerge Ihnen dies mit seiner Regelsatzunterstützung für XML (und viele andere Sprachen) bieten. Ich bin nicht sicher, ob es alle Ihre Probleme beheben wird, denn das Beispiel ist natürlich eine Vereinfachung des eigentlichen Programms. Ich habe etwas komplexere Änderungen versucht, und diese scheinen auch gut zu funktionieren.

Im folgenden Beispiel finden Sie das von Ihnen beschriebene Diff

einfacher Diff

Sander Rijken
quelle
1
Ich habe gerade einen kurzen Blick auf die echten Dateien geworfen, und es sieht so aus, als würde es perfekt funktionieren. Vielen Dank so viel!
Jon Skeet
4

Meine Lösung ist unvergleichlich . (ein viel leistungsfähigeres Werkzeug)

Also beginnen wir damit, das Problem zu sehen.

Bildbeschreibung hier eingeben

BC hat eine spezielle XML-Parsing-Rolle: (Es hat bereits eine XML-Rolle, aber keine mit Voranalyse - die sortiert und aufgeräumt ist. )

Bildbeschreibung hier eingeben

Also gehen wir zu http://www.scootersoftware.com/download.php?zz=kb_moreformats_alt

Bildbeschreibung hier eingeben

und nun -

Bildbeschreibung hier eingeben

Ich hoffe, Sie werden es für die nächste Ausgabe von C # verwenden

ps Wenn der Text in Bildern zu klein ist, klicken Sie einfach auf das Bild, um die Originalbilder zu laden.

Royi Namir
quelle
Übrigens, was bedeutet " Namir.78 "?
Pacerier
0

Ich hatte vor nicht allzu langer Zeit das gleiche Problem in einer Firma. Sie wollten einen echten "XML-Unterschied" finden, und es scheint keine vollständigen Lösungen zu geben.

Die einfachste Lösung besteht darin, zuerst ein Pretty-Print-Skript für das XML-Format auszuführen , um die Zeilenenden und Abstände zu normalisieren, und dann das Diff-Tool der Wahl auszuführen ( WinMerge ist für Windows geeignet ). Dies wirft eine Menge Treibgut ab, das die meisten Diffe-Tools aus XML auf Sie werfen, und es ist wirklich einfach, ein Skript zu erstellen.

Jweede
quelle
Das Problem ist , dass die XML bereits ist ziemlich druckt, effektiv - es ist die Einfügungen und Löschungen , die Veränderungen in denen Linien gewickelt werden. Ich frage mich, ob ich etwas brauche, um eine Datei basierend auf den Wörtern, die am Ende von Zeilen in einer anderen vorkommen, neu zu formatieren :(
Jon Skeet
0

SD Smart Differencer vergleicht Dokumente anhand der Struktur und nicht anhand des tatsächlichen Layouts.

Es gibt einen XML Smart Differencer. Für XML bedeutet dies, dass die Reihenfolge der Tags und des Inhalts übereinstimmt. Es sollte beachtet werden, dass die Textzeichenfolge in dem angegebenen Fragment unterschiedlich war. (Es versteht derzeit nicht den XML-Begriff von Text, in dem Leerzeichen normalisiert oder signifikant sind, aber ich vermute, dass Ihnen das nicht sehr schaden wird.)

Ira Baxter
quelle
0

@ Jon Skeet: Sie haben in Ihrer Frage erwähnt, dass Diff-Tools nicht umbrechen, wenn sie angezeigt werden.
vimdiff(auch unter Windows über verfügbar gvim) ermöglicht es Ihnen, die angezeigten XML-Dateien mit einem Zeilenumbruch zu versehen :window set wrap. Referenzlink .
Sie können auch ausführen :diffupdate, um die Unterschiede zu aktualisieren.

GuruM
quelle