Vergleichen XmlDocument für die Gleichstellung (inhaltlich)
Wenn ich vergleichen möchte den Inhalt eines XMlDocument, ist es genau das?
XmlDocument doc1 = GetDoc1();
XmlDocument doc2 = GetDoc2();
if(doc1 == doc2)
{
}
Ich bin nicht der überprüfung, wenn Sie beide das gleiche Objekt verweisen, aber wenn Sie den INHALT der xml sind die gleichen.
InformationsquelleAutor Blankman | 2010-05-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht. XmlDocument nicht überschreiben das Verhalten des
Equals()
Methode so, es ist in der Tat nur durchführen Referenz-Gleichheit, die scheitern wird, in deinem Beispiel, es sei denn, die Dokumente sind eigentlich die gleichen Objekt-Instanz.Wenn Sie wollen, vergleichen Sie den Inhalt (Attribute, Elemente, Kommentare, PIs, etc) von einem Dokument, das Sie implementieren müssen, um die Logik selbst. Seien Sie gewarnt: es ist nicht trivial.
Je nach Ihren genauen Szenario, können Sie entfernen Sie alle nicht benötigten Leerzeichen aus dem Dokument (was selbst kann tückisch sein) und vergleichen Sie die resultierende xml-text. Dies ist nicht perfekt - es schlägt für Dokumente, die semantisch identisch, unterscheiden sich aber in Dinge wie namespaces verwendet werden und erklärt werden, oder ob bestimmte Werte escaped oder nicht, die Reihenfolge der Elemente, und so weiter. Wie ich schon sagte, XML-Vergleich ist nicht trivial.
Sie auch brauchen, um klar zu definieren, was es bedeutet, für zwei XML-Dokumente zu "identisch". Tut element-oder Attribut-Bestellung eine Rolle? Nicht Fall (in text-Knoten) eine Rolle? Sollte Sie ignorieren überflüssig CDATA-Abschnitte? Tun Verarbeitungshinweise zählen? Was ist fully qualified vs. teilweise qualifizierte namespaces?
In Allgemeine Umsetzung, sind Sie wahrscheinlich gehen zu wollen, zu transformieren beide Dokumente in eine kanonische form (XML oder eine andere Darstellung) und dann vergleichen Sie die kanonisierte Inhalte.
Tools, die bereits vorhanden ist, führen Sie XML differencing, wie Microsoft XML Diff/Patch, Sie möglicherweise in der Lage zu nutzen, zu identifizieren Unterschiede zwischen zwei Dokumenten. Meines Wissens nach, das tool wird nicht verteilt in source-form ... also, um es in eine eingebettete Anwendung, die Sie brauchen würde, um ein Skript für den Prozess (wenn Sie planen, es zu benutzen, sollten Sie zuerst überprüfen, dass die Lizenzbestimmungen erlauben, die Benutzung und Verbreitung).
EDIT: Check-out @Max die Antwort von Toro wenn Sie .NET 3.5 SP1, da es anscheinend gibt es eine option, in XLinq, die hilfreich sein können. Schön zu wissen, dass es existiert.
InformationsquelleAutor LBushkin
Versuchen die DeepEquals Methode auf die XLinq-API.
Siehe auch Gleichheit Semantik von LINQ to XML-Bäume
Sehr schön. Ich wusste nicht, diese existierte. Es sieht aus wie es verarbeitet viele der Fälle, die ich beschreibe.
Schön - das bedeutet, dass ich nicht importieren müssen eine Drittanbieter-Bibliothek, dies zu tun für mich!
InformationsquelleAutor Max Toro
Ein einfacher Weg sein könnte, um zu vergleichen
OuterXml
.InformationsquelleAutor Wernight
LBushkin ist Recht, das ist nicht trivial. Da XML ist die string-Daten könnte man technisch ein hash-Wert den Inhalt und vergleichen, sondern werden beeinflusst durch Dinge wie Leerzeichen.
Könnten Sie führen eine strukturierte diff (auch als "XML-diffgram') zwischen den beiden Dokumenten und die Ergebnisse vergleichen. Dies ist, wie .NET-datasets änderungen im Blick behalten, zum Beispiel.
Anderes, als dass Sie hätte zu Durchlaufen, den DOM und vergleichen Sie Elemente, Attribute und Werte zueinander. Wenn es ein schema beteiligt, dann würde sich auch zu berücksichtigen, Positionen und so weiter.
InformationsquelleAutor kprobst
Oft Sie wollen, vergleichen Sie XML-strings bestellt anders. Diese kann getan werden einfach mit diesem code
InformationsquelleAutor Stig