Im Moment versuchen wir, Goldkonfigurationen für unsere Umgebung zu erstellen. Eine Software, die wir verwenden, basiert auf großen XML
Dateien, um den Großteil ihrer Konfiguration zu enthalten. Wir möchten unsere Laborumgebung als unsere "Goldkonfiguration" katalogisieren und dann in Zukunft in der Lage sein, diese Konfiguration zu überprüfen.
Da diff ein byteweiser Vergleich und KEIN logischer Vergleich ist, können wir ihn in diesem Fall nicht zum Vergleichen von Dateien verwenden ( XML
ist ungeordnet, funktioniert also nicht). Was ich suche, ist etwas, das die beiden XML
Dateien analysieren und Element für Element vergleichen kann. Bisher haben wir noch keine Dienstprogramme gefunden, die dies tun können. Betriebssystem spielt keine Rolle, ich kann es auf alles tun, wo es funktionieren wird. Die Präferenz ist etwas von der Stange.
Irgendwelche Ideen?
Bearbeiten: Ein Problem, auf das wir gestoßen sind, ist, dass die Konfigurationsdateien eines Anbieters gelegentlich dasselbe Element mehrmals erwähnen, jedes Mal mit unterschiedlichen Attributen. Welches Diff-Dienstprogramm wir auch verwenden, es muss in der Lage sein, entweder den Satz von Attributen oder alle als Teil eines Elements zu identifizieren. Große Bestellung :)
Antworten:
Zwei Ansätze, die ich verwende, sind (a) das Kanonisieren beider XML-Dateien und das anschließende Vergleichen ihrer Serialisierungen sowie (b) das Verwenden der Deep-Equal () -Funktion von XPath 2.0. Beide Ansätze sind in Ordnung, um Ihnen zu sagen, ob die Dateien gleich sind, aber nicht sehr gut, um Ihnen zu sagen, wo sie sich unterscheiden.
Ein kommerzielles Tool, das sich auf dieses Problem spezialisiert hat, ist DeltaXML.
Wenn Sie Dinge haben, die Sie als gleichwertig betrachten, die jedoch auf XML-Ebene nicht gleichwertig sind, z. B. Elemente in einer anderen Reihenfolge, müssen Sie möglicherweise vor dem Vergleich auf eine Transformation vorbereitet werden, um die Dokumente zu normalisieren.
quelle
Gute Antwort hier:
Entschuldigung für die Nichteinhaltung der Serverfehlerkonventionen ... Ich bin sicher, jemand wird mich informieren und ich werde entsprechende Änderungen vornehmen.
quelle
Python-basiert
xmldiff
scheint eine sehr attraktive Lösung zu sein. Es wird behauptet, "Unterschiede zwischen zwei XML-Dateien zu extrahieren und eine Reihe von Grundelementen zurückzugeben, die auf den Quellbaum angewendet werden sollen, um den Zielbaum zu erhalten."Beispiel:
a1.xml
a2.xml
xmldiff a1.xml a2.xml
::quelle
Ich habe dafür ein einfaches Python-Tool namens geschrieben
xmldiffs
:Erhalten Sie es unter https://github.com/joh/xmldiffs
quelle
Es gibt kommerzielle und kostenlose Tools, die "XML-fähig" sind und ohne großen Aufwand das tun, was Sie brauchen. Es gibt anscheinend auch ein Eclipse-Plugin , das XML vergleicht.
Alternativ können Sie die Felder auch über xsl: sort oder durch Angabe einer Sequenzreihenfolge in Ihrer XSD sortieren (wodurch vorhandene Dokumente per Definition ungültig werden). Anschließend können Sie beide Dokumente "normalisieren", bevor Sie sie mit einem nicht xml-fähigen Diff-Tool vergleichen. Durch das Normalisieren werden zuerst alle Formatierungsunterschiede entfernt, die sich nicht auf den tatsächlichen Inhalt des XML auswirken. (Stellen Sie sich vor, Sie wenden einen Filter im XML-Codestil an.)
quelle