2008-10-27 108 views
4

我要轉換包含一個節點內的許多元素的XML文檔(約150)到另一個XML文檔具有稍微不同的模式,但大多具有相同的元素名稱。現在,我必須手動映射兩個文檔之間的每個元素/節點。爲此,我將不得不硬編碼150行映射和元素名稱。事情是這樣的:轉換一個XML文檔轉換成另一個XML文檔

XElement newOrder = new XElement("Order"); 
newOrder.Add(new XElement("OrderId", (string)oldOrder.Element("OrderId")), 
newOrder.Add(new XElement("OrderName", (string)oldOrder.Element("OrderName")), 
............... 
............... 
...............and so on 

的newOrder文檔可能包含如果沒有在oldOrder發現它們將被設置爲null額外的節點。因此,除了硬編碼150個元素名稱,比如orderId,orderName等,還有其他選擇嗎?還是有更好的更易維護的方法?

回答

15

改爲使用XSLT transform。您可以使用內置的.NET XslCompiledTransform進行轉換。讓您不必輸入堆疊的代碼。如果你還不知道XSL/XSLT,那麼學習它會給你一些簡歷:)

祝你好運!

+0

任何好XSLT編輯器? – 2008-10-27 11:12:50

1

使用XSLT轉換將舊的xml文檔轉換爲新格式。

1

XElement.Add有一個overload需要object []。

List<string> elementNames = GetElementNames(); 

newOrder.Add(
    elementNames 
    .Select(name => GetElement(name, oldOrder)) 
    .Where(element => element != null) 
    .ToArray() 
); 

//

public XElement GetElement(string name, XElement source) 
{ 
    XElement result = null; 
    XElement original = source.Elements(name).FirstOrDefault(); 
    if (original != null) 
    { 
    result = new XElement(name, (string)original) 
    } 
    return result; 
}