2008-10-27 110 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; 
}