2009-06-26 17 views

Antwort

4

Hängt davon ab, welche Art von Vergleich Sie wollen.

Wenn Sie zum Beispiel nur den Inhalt in zwei Dateien vergleichen und den Status "Wahr/Falsch" erhalten möchten, würde ich XmlReader für jede der beiden zu vergleichenden Dateien vorschlagen und dann die Knoten analysieren. In dem Moment, in dem Sie auf einen Unterschied stoßen, können Sie aufhören zu analysieren.

Diese verwenden XML-Dokument unterscheidet, wo Sie das gesamte Dokument in den Speicher zu lesen, die String-Darstellung erhalten und die Saiten vergleichen. Sein

zwei XML-Dokumente könnten (Für kleinere Datei spielt es keine Rolle Größen) semantisch äquivalent, aber die Struktur könnte anders sein (in diesem Fall muss der Vergleich schlauer sein).

Wenn Sie beabsichtigen, das Quelldokument zu ändern, wird für den Fall, dass der Vergleich fehlschlägt/erfolgreich ist, der DOM-Weg bevorzugt (XmlDocument-Klasse und seine API).

+0

Ich stimme zu, es kommt darauf an, ob eine logische Äquivalenz (die in beiden XML-Dokumenten enthaltenen Byte-Daten sind identisch) oder semantisch äquivalent (die in beiden XML-Dokumenten dargestellte Information haben die gleiche Bedeutung). Wenn z. B. Differenzen "nicht signifikanter Leerzeichen" (z. B. Einrückung/Formatierung von Leerzeichen) von Bedeutung sind, müssen Sie die Vergleichsoperation anders angehen, als wenn Sie nur wissen möchten, ob die Daten jedes Attributs, Elements und Knotens identisch sind . –

8

einfach die Textdarstellung der XML-Vergleich nicht valide Ergebnisse liefern - check this out:

<node x="1" y="2" /> 

und

<node y="2" x="1" /> 

identisch sind, so weit wie die XML-Verarbeitung geht (Reihenfolge der Attribute auf ein Knoten ist irrelevant), aber wenn Sie nichts als Text vergleichen, markieren Sie ihn als einen Unterschied.

Microsoft verwendet, um ein XmlDiff Tool auf GotDotNet haben, aber ich bin mir nicht sicher, ob das irgendwo noch vorhanden ist .....

UPDATE
xmldiff scheint immer noch verfügbar zu sein - lesen Sie in diesem download link sowie dieser "Using the XML Diff and Patch Tool in your application" Link auf MSDN.

Marc

2

Es gibt auch dieses Open-Source-Projekt: http://diffxml.sourceforge.net/

Ich habe beide xmldiff von Microsoft und diesem Rahmen verwendet. Ich denke, MS XmlDiff hat ein paar mehr Vergleichsmöglichkeiten, also verwende ich das jetzt. Aber wenn Sie Open Source wollen, ist DiffXml ein gutes Framework.

1

Um XML-Dateien zu vergleichen, hatte ich Probleme mit MS XmlDiff, also schrieb ich eine viel einfachere Vergleichsmethode. Ich schrieb eine einfache Anwendung, die alle Elemente mit Attributen auswählte, da die XML-Dateien, die ich vergleichen musste, keine Werte im Elementknoten selbst speichern. Diese Auswahl ist wirklich einfach in XPath: // [@]
Ich habe dies für beide Dokumente, also zwei Listen von Knoten. Dann habe ich diese Knoten in eine XPath-Zeichenkette geändert, indem ich rekursiv durch die übergeordneten Knoten gegangen bin und die Attribibut-Werte als Bedingungen hinzugefügt habe. So endete ich mit zwei Listen von XPath-Strings.
Der letzte Schritt bestand darin, durch diese Listen zu gehen und zu prüfen, ob das andere Dokument einen Knoten mit dem angegebenen XPath hat. Wenn nicht, fehlte es und ich würde genau wissen, welches Element fehlte.Diese Liste der fehlenden Knoten wurde an eine Textdatei gemeldet und somit hatte ich einen einfachen Bericht über die Unterschiede zwischen zwei Dokumenten, ignorierte die Reihenfolge der Attribute, die Werte der Elemente und alle Elemente ohne Attribute. Was genau ich brauchte.

Wenn Sie jedoch einen komplexeren XML-Vergleich benötigen, lesen Sie die anderen Antworten. :-)

0

Project: Merge ist eine Windows-Anwendung, die XML-Dateien vergleichen (und zusammenführen) kann.

Verwandte Themen