我想将一个节点(大约150个)中包含许多元素的XML文档转换为另一个模式略有不同但元素名称基本相同的XML文档。现在,我必须手动映射两个文档之间的每个元素/节点。为此,我必须对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等)进行硬编码之外,我还有其他选择吗?或者有更好、更易于维护的方法吗?
请改用XSLT转换。您可以使用内置的。NET XslCompiledTransform进行转换。使您不必键入代码堆栈。如果你还不知道XSL/XSLT,那么学习它会让你获得简历:)
祝你好运!
使用XSLT转换将旧的xml文档转换为新格式。
XElement。Add有一个接受对象[]的重载。
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;
}