将一个XML文档转换为另一个XML文档

时间:2008-10-27 10:13:28

标签: c# xml linq .net-3.5

我想将包含节点内的许多元素(大约150个)的XML文档转换为另一个XML文档,该文档具有稍微不同的模式,但大多数具有相同的元素名称。现在我必须手动映射2个文档之间的每个元素/节点。为此,我将不得不硬编码150行映射和元素名称。像这样:

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等)之外,我还有其他选择......还是有一些更好的可维护方式?

3 个答案:

答案 0 :(得分:15)

请改用XSLT transform。您可以使用内置的.NET XslCompiledTransform进行转换。使您免于输入堆栈代码。如果你还不知道XSL / XSLT,那么学习它就会让你知道:)

祝你好运!

答案 1 :(得分:1)

使用XSLT转换将旧的xml文档转换为新格式。

答案 2 :(得分:1)

XElement.Add有一个overload,它接受​​对象[]。

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;
}