Sortieren von XML-Dateien, so dass Unterschiede dann gefunden werden können

Ich muss zwei XML-Dateien vergleichen, von denen jede etwa 13.000 Zeilen lang ist.

Leider generiert der Code, der diese Dateien generiert, die Daten nicht jedes Mal in derselben Reihenfolge (die Daten stammen aus einer Datenbank).

Daher erhalte ich falsch positive Ergebnisse, wenn ich ein Standard-zeilenweises Diff-Dienstprogramm (WinMerge) verwende, auch nachdem die XML-Datei kanonisiert hat.

Als Beispiel für meine problem:

Datei1:

<a>
  <b key="fruit.preferred">banana</b>
  <b key="fruit.available">pineapple</b>
  <b key="fruit.available">apple</b>
  <b key="fruit.available">orange</b>
</a>

Datei2:

<a>
  <b key="fruit.available">pineapple</b>
  <b key="fruit.preferred">banana</b>
  <b key="fruit.available">apple</b>
  <b key="fruit.available">orange</b>
</a>

Diese Dateien haben den gleichen Inhalt, aber die Position der Bananenzeile bedeutet, dass sie vom traditionellen Diff als unterschiedlich angesehen werden. Gibt es Tools, die eine Sortierung so durchführen können, dass die Dateien als gleich angesehen werden?

Die XML-Dateistrukturen sind übrigens komplizierter als die obigen Beispiele!

Author: Community, 2011-09-13

1 answers

Ich denke, Sie können ein Tool wie xmldiff für diese Zwecke verwenden.

Http://diffxml.sourceforge.net/

Auf der tools-Webseite heißt es:

Die Standard-Unix-Tools diff und patch werden verwendet, um die Unterschiede zwischen Textdateien zu finden und die Unterschiede anzuwenden. Diese Tools arbeiten zeilenweise mit gut untersuchten Methoden zur Berechnung der längsten gemeinsamen Untersequenz (LCS).

Verwenden dieser Tools für hierarchisch strukturierte Daten (XML usw) führt zu suboptimalen Ergebnissen, da sie die Baumstruktur dieser Dateien nicht erkennen können.

 2
Author: Kenneth Yrke Joergensen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-06-12 13:48:39