2009-03-04 128 views
2

我一直負責創建一個工具,可以比較和合並我公司產品的配置文件。配置存儲爲XML或URL編碼的字符串。我正在尋找一個圖書館,最好是開放源代碼,與商業軟件兼容的許可證,可以做這些差異。我們的應用程序是用C++編寫的,因此C++庫會是最好的,但是我願意查看C#特定的庫,因爲我可以編寫一個通過COM將它公開給C++的包裝器。三向差異是理想的,但雙向是可以接受的。如果它理解了XML,那也是一個優點(因爲XML節點可以在不更改文檔的情況下重新排序)。任何圖書館建議?我是否應該考慮編寫自己的差異工具,希望能夠爲我們的格式提供語義知識?圖書館做差異

感謝this similar question,我已經發現this google library,這看起來非常棒,但我仍在尋找其他選擇。它似乎也能夠輸出HTML格式的差異(使用<ins><del>標籤,在我發現它之前我不知道這些標籤),這可能非常方便,但它似乎只是一個統一的差異。我將需要在Web瀏覽器中顯示結果,並且可能必須構建用於在瀏覽器中進行合併的接口。我不希望一個圖書館能夠幫助完成這些任務,但是它必須以適合我的格式生成輸出結果。我目前正在設想一些沿着TortoiseMerge(並排比較,不統一)的方式,除了基於瀏覽器的東西。任何提示/技巧/設計想法如何呈現這將不勝感激。

回答

1

爲了區分XML,我建議您先對其進行標準化:按字母順序對所有元素進行排序,然後生成代表原始文檔但獨立於原始格式的標記/ xml流。運行diff之後,解析結果以獲取包含添加/刪除內容的樹。

3

Subversion附帶libsvn_difflibsvn_delta許可下的Apache軟件許可證。

2

Here是一個C++庫,它可以區分作者稱爲半結構化數據的內容。它很好地處理HTML和XML。由於您的數據是XML,因此使用它代替純文本差異會很有意義。當機器生成文件時尤其如此。

我目前正在嘗試使用這個庫來構建一個差異化Visual Studio項目文件的工具。這些基本上都是XML文件,使用像Winmerge這樣簡單的差異工具太痛苦了,因爲Visual Studio幾乎通過瘋狂的重新排序來分散整個文件。這個想法是做一些結構化的差異來解決這個問題。