Я хочу преобразовать XML-документ, содержащий много элементов внутри узла (около 150), в другой 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 может содержать дополнительные узлы, которым будет присвоено значение NULL, если для них ничего не найдено в oldOrder. Итак, есть ли у меня другой выбор, кроме как жестко закодировать 150 имен элементов, таких как orderId, orderName и т. д... Или есть более удобный способ обслуживания?





Вместо этого используйте XSLT преобразование. Для преобразования можно использовать встроенный .NET XslCompiledTransform. Избавляет вас от необходимости набирать кучу кода. Если вы еще не знаете XSL / XSLT, то изучение этого вопроса поможет вам получить резюме :)
Удачи!
Руководство программиста XSLT Майкла Кея (Wrox Press) незаменим.
Подтверждаю: 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;
}
Мы используем xmlspy, и в Visual Studio есть встроенный редактор. Я настоятельно рекомендую jenitennison.com/xslt и w3schools.com/xsl/xsl_languages.asp.