C#-Bibliothek für 4-Wege-XML-Vergleich

Ich habe 4 XML-Dateien: A, B, C und D. Ich möchte wissen, ob der Unterschied zwischen A und B derselbe ist wie der Unterschied zwischen C und D.

Mein erster Gedanke war, die XML-Diff-Patch - Bibliothek von Microsoft zu verwenden, die zwei Dateien vergleicht und ein DiffGram generiert, ein XML-Dokument, das den Unterschied zwischen den beiden verglichenen Dateien beschreibt. Mein Gedanke ist, dass ich A mit B vergleichen könnte, um DiffGram X und C mit D zu erhalten, um DiffGram Y zu erhalten, und dann einen dritten XML-Vergleich zwischen X und Y durchführen könnte.

Die Idee klingt auf dem Papier gut; leider stellt sich heraus, dass es nicht so einfach ist. Der Unterschied zwischen A und B ist dem Unterschied zwischen C und D sehr ähnlich, aber X und Y sehen einander nicht ähnlich.

Das Problem ist, dass es DiffGrams wie die folgenden gibt:

<xd:node match="4">
           <xd:node match="2">
              <xd:node match="1">
                 <xd:remove match="1-3" />
              </xd:node>
           </xd:node>

           <xd:node match="1">
              <xd:node match="1">
                 <xd:remove match="1-3" />
              </xd:node>
           </xd:node>
        </xd:node>

Dies hat zwei Hauptprobleme: Erstens ist es extrem kryptisch - ich würde es vorziehen, wenn es besser lesbar wäre, aber es ist nicht das Ende der Welt, wenn dies nicht der Fall ist (da mein Hauptzweck die programmgesteuerte Verarbeitung ist). Zweitens (und viel kritischer) scheint dies sehr eng mit den spezifischen XML-Dateien gekoppelt zu sein, die in diesem speziellen Vergleich enthalten sind.

Kennt jemand eine .NET-Bibliothek (vorzugsweise als NuGet-Paket verfügbar), die für diesen Zweck besser geeignet wäre?

Antworten (1)

Es ist möglicherweise keine exakte Übereinstimmung, aber Altova kann die tatsächlichen Unterschiede zwischen zwei Dateien exportieren: https://www.altova.com/diffdog/differences-report-files.html

Sie könnten dann die beiden Unterschiede nehmen und diese unterscheiden.