2009-03-04 15 views
2

Ich habe die Aufgabe, ein Werkzeug zu erstellen, das die Konfigurationsdateien für das Produkt meines Unternehmens vergleichen und zusammenführen kann. Die Konfigurationen werden als XML- oder URL-codierte Zeichenfolgen gespeichert. Ich bin auf der Suche nach einer Bibliothek, vorzugsweise Open Source mit einer Lizenz, die mit kommerzieller Software kompatibel ist, die diese Unterschiede machen kann. Unsere App ist in C++ geschrieben, also wären C++ - Bibliotheken am besten, aber ich bin bereit, Bibliotheken zu betrachten, die C# -spezifisch sind, da ich einen Wrapper schreiben kann, der ihn über COM für C++ verfügbar macht. Drei-Wege-Diffs wären ideal, aber Zweiweg ist akzeptabel. Wenn es XML versteht, wäre das ein Plus (da XML-Knoten neu angeordnet werden können, ohne das Dokument zu ändern usw.). Irgendwelche Bibliothek Vorschläge? Sollte ich überhaupt in Erwägung ziehen, meine eigenen Diff-Tools zu schreiben, in der Hoffnung, sie mit semantischem Wissen über unsere Formate zu versehen?Bibliothek für die Erstellung von Diffs

Dank this similar question habe ich bereits this google library entdeckt, das scheint wirklich toll, aber ich bin immer noch auf der Suche nach anderen Optionen. Es scheint auch in der Lage zu sein, die Diffs im HTML-Format (mit den Tags <ins> und <del>, die ich nicht kannte, bevor ich es entdeckte) auszugeben, was wirklich praktisch sein könnte, aber es scheint nur ein einheitliches Diff zu sein. Ich muss die Ergebnisse in einem Webbrowser anzeigen und wahrscheinlich auch eine Schnittstelle für die Zusammenführung im Browser erstellen. Ich erwarte nicht, dass eine Bibliothek in der Lage ist, bei diesen Aufgaben zu helfen, aber ich muss die Ausgabe in einem Format produzieren, das für mich geeignet ist, dies zusätzlich zu erstellen. Ich stelle mir gerade etwas vor wie TortoiseMerge (Side-by-Side-Diffs, nicht vereinheitlicht), außer browserbasiert. Irgendwelche Tipps/Tricks/Design-Ideen, um dies zu präsentieren, würde auch geschätzt werden.

Antwort

1

Für die Diffimierung des XML würde ich vorschlagen, dass Sie es zuerst normalisieren: Sortieren Sie alle Elemente in alphabetischer Reihenfolge und erzeugen Sie dann einen Strom von Token/XML, der das Originaldokument darstellt, aber unabhängig von der ursprünglichen Formatierung ist. Nachdem Sie das Diff ausgeführt haben, analysieren Sie das Ergebnis, um einen Baum zu erhalten, der das enthält, was hinzugefügt/entfernt wurde.

3

Subversion wird mit libsvn_diff und libsvn_delta unter der Apache-Softwarelizenz lizenziert.

2

Here ist eine C++ - Bibliothek, die unterscheiden kann, was der Autor semistrukturierte Daten aufruft. Es befasst sich gut mit HTML und XML. Da es sich bei Ihren Daten um XML handelt, wäre es sehr sinnvoll, anstelle von Nur-Text-Vergleich zu verwenden. Dies ist insbesondere dann der Fall, wenn die Dateien maschinell erzeugt werden.

Ich versuche derzeit, diese Bibliothek zu verwenden, um ein Tool zu erstellen, mit dem Visual Studio-Projektdateien diffundieren. Dies sind im Grunde XML-Dateien und die Verwendung eines einfachen Diff-Tools wie Winmerge ist zu schmerzhaft, weil Visual Studio die ganze Datei durch verrücktes Nachbestellen ziemlich verdirbt. Die Idee ist, eine Art strukturiertes Diff zu machen, um das Problem anzugehen.

Verwandte Themen