2009-10-23 66 views
0

首先,讓我首先告訴你我想解決的問題的細節。以編程方式區分/合併Xml文檔

我們有第三方應用程序使用Xml文檔來存儲它的所有業務邏輯並查找表等。該應用程序具有一組基本的Xml文件,並使用一種繼承模型來顯示我們要編輯的繼承的Xml文件以定製業務邏輯。由於其使用的繼承的可怕實現,我說「有點」。

目前有超過3000個獨立的Xml文件,從1k到5000k不等,總共大小約600MB。迄今爲止唯一的好處是,它們都使用相同的Xsd。

我們的問題是,我們每個月都會收到核心Xml文件的更新,我們應該把它們放到位,並升級我們的自定義文檔以與新版本的基礎文檔保持一致。我們目前正在使用DiffDog手動執行此操作,並將這些文檔拼湊在一起以創建新文檔,但我正試圖圍繞以編程方式執行此操作的可能性。讓我看看我是否可以爲你想像這種情況:

我們從下面的結構類型開始,使用基本模板,以及我們可以定義自定義規則的自定義模板(其中我們做了很多)

.. \ LineOfBusiness \ BaseTemplates \ BaseXml_1_0_0_0.xml
.. \ LineOfBusiness \ CustomTemplates \ Document_1_0_0_0.xml

我們則給予每月升級所以現在我們有像這樣的結構:

.. \ LineOfBusiness \ BaseTemplates \ BaseXml_1_0_0_0.xml
.. \ LineOfBusiness \ BaseTemplates \ BaseXml_1_1_0_0.xml
.. \ LineOfBusiness \ CustomTemplates \ Document_1_0_0_0.xml

我們的工作主要是創建

.. \ LineOfBusiness \ CustomTemplates \ Document_1_1_0_0.xml

文檔自己每個月,帶來我們在以前的版本中所做的更改,到新版本的邏輯。

我知道這個系統很荒謬,但我今天無法改變。如何解決這個問題的任何想法都會很棒。我可以告訴你我所想的那麼遠,

  1. 反序列化基地和自定義舊版本的文件,以獲得特定的差異列表中,把這些差異對新基地的反序列化版本並將差異應用於它,然後reserialize到XML。

  2. 對自定義模板應用某種註解過程,以便我們可以在升級時以編程方式提取差異。

  3. 外包升級過程...

+0

你使用什麼語言? – 2009-10-23 12:38:51

+0

雖然我們有兩個Java開發人員,但我們這裏主要是微軟的一個商店。但是,除了語言,任何想法,或思想,將不勝感激。 – 2009-10-23 15:16:31

回答

2

如果您使用.NET語言,你也許可以完成你的努力與Microsoft's XML Diff and Patch工具/庫做。

我用它來正確識別不同的xml片段之間有變化。這對於我們的場景非常重要,因爲我們在磁盤上存儲的XML在存儲在Sql Server XML列中後會因爲刪除不重要的空白和/或重新排列屬性(Infoset)而有所不同。只是比較文本斑點總會檢測到差異,實際上元素/值是相同的。

我沒有使用該工具的修補功能,只有XmlDiff。

目前市場上幾個漂亮的商業XML比較工具,但我不知道有什麼提供的代碼,或腳本API。這將是一個很好的增值功能!

+0

我看過其他Diff/Patch工具,我不得不看看那個。 這個基本概念是我想到的。取兩個5_0文檔,並從它們生成一個補丁。然後獲取該補丁並將其應用於5_1文檔以創建自定義5_1文檔。 – 2009-10-23 15:18:22

+0

如果你得到了一些符合你的喜好的東西,請發佈一下。我想聽聽你的經驗。祝你好運! – 2009-10-23 21:20:24

+0

Xml Diff非常適合比較,唯一的問題是我可以爲原始文檔生成存儲散列值的DiffGram。所以我無法將補丁應用於新文檔。此外,它基於節點索引構建修補程序,因此我無法將其手動應用到新文檔。該工具將來肯定會變得有用,但我認爲這對於這種情況不會有幫助。 – 2009-10-26 11:29:55