2012-06-11 60 views
0

當前我們有一個XML模式,代碼讀取xml文件,根據模式進行驗證並保存到數據庫。將來會出現模式更改,代碼如何處理它們而無需重新編寫新模式的代碼。無需更改代碼即可處理XML模式更改

感謝,

讓我舉一個例子

<Products> 
    <product id="1"> 
     <name> ABC </name> 
     <desc> good one </desc> 
    </product> 
</products> 

的XPath映射配置

Table  Column  XPath 
Product id   //Products/product/id 
Product name  //Products/product/name 
Product desc  //Products/product/desc 

現在的C#代碼讀取ID,名稱和說明,並基於對一個INSERT語句映射配置

如果模式更改並且新元素被添加了說價格,我們會將該價格添加到映射中,因此生成的新插入語句包含價格。

這項工作?

回答

1

我討厭解析XML並將其加載到對象中。因此,您可以嘗試以下方法。

創建一個代表您正在討論的XML數據的C#對象。序列化該C#類,並提煉你有一個強類型的XML模式。另外,如果將來需要額外的架構更改,只需修改C#類並重新進行串行化即可。

這也不需要解析XML文檔(假設您在CLR中使用它),因爲您可以簡單地引用C#類,並且可以將其反序列化回內存而不需要任何解析。

1

處理這樣的事情是馬上想到將有一個不帶數據已知良好的骨骼XML架構的方式,有碼分析和學習模式,然後把它在任何任意輸入運行你給它。當XML模式發生變化時,只需讓可信的用戶/管理員進入並更改已知的良好框架即可。

你應該確保你的數據庫可以處理這些變化沒有任何額外的推動下,以及你最應該有規律地運行,並且如果檢測到問題甩開警報至少有幾個測試。 「低維護」過程中最危險的因素之一就是它們經常失靈,無法告訴它們已經損壞!

我有點害怕,我沒有得到你的整個問題,因爲你加了一堆那顯然不是你的問題的標籤,但希望這有助於。

1

如果XML數據的位置發生變化,除非你想抽象的廢話了你的XML文件(包括描述在哪裏可以找到的東西在文檔中的元數據),你的運氣了。如果你的數據元素總是在同一個地方,你所要做的就是將你的XSD文件保存爲一個單獨的文件,並在必要時更改它以驗證文檔。