Ich möchte XML-Dokument zu vergleichen. manche sind 50k +. Ich vergleiche den OuterXml. ist das effizient? Gibt es einen effizienteren Weg?Vergleichen XmlDocument
Antwort
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).
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
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.
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. :-)
Project: Merge ist eine Windows-Anwendung, die XML-Dateien vergleichen (und zusammenführen) kann.
- 1. Einsatz XmlDocument in einem XmlDocument Knoten
- 2. Leistung: XDocument versus XmlDocument
- 3. C# XmlDocument Knoten
- 4. xmldocument und verschachtelte Schemas
- 5. Set XMLDocument als Saxon.Api.XMLDestination
- 6. C# XMLDocument zu DataTable?
- 7. mit XmlDocument statt XElement
- 8. XML-Attribut mit XmlDocument lesen
- 9. Build XMLDocument in C#. NET
- 10. Read/Write XmlDocument mit Namespaces
- 11. C# XmlDocument SelectNodes funktioniert nicht
- 12. XmlDocument und langsames Schema Verarbeitung
- 13. Wie XMLnamespace zu einem XmlDocument
- 14. Kann ich ein XmlDocument innerhalb eines Knotens eines anderen XmlDocument in C# hinzufügen?
- 15. Erstellen eines XmlDocument mit hartcodiertem Schema C#
- 16. Root-Element fehlt - XmlDocument mit XmlTextWriter erstellen
- 17. .net: XmlDocument erstellt eine Zeile XML-Dokument
- 18. XML-Tag in XmlDocument einfügen/ersetzen
- 19. Beste Möglichkeit, ein XmlDocument (.NET) zu verschönern?
- 20. XmlDocument-Klasse entfernt Formatierung, C#, .NET
- 21. erstellen XmlDocument aus einem anderen Dokument
- 22. XMLDocument-Objekt in String in Javascript konvertieren
- 23. GetElementsByTagName bekommt nur den ersten Knoten (XMLDocument)
- 24. Last Zeichenfolge mit mehreren URLs XmlDocument mit
- 25. So entfernen Sie Leerzeichen aus einem XmlDocument
- 26. Windows Phone - XmlDocument konnte nicht gefunden werden
- 27. Erstellen von XML mit XmlDocument C#
- 28. Relative XPath-Knotenauswahl mit C# XmlDocument
- 29. Suche nach Knoten mit Namen in XmlDocument
- 30. XMLDocument, Differenz zwischen InnerXml und OuterXml
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 . –