我想将包含节点内的许多元素(大约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等)之外,我还有其他选择......还是有一些更好的可维护方式?
答案 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;
}