#c# #linq-to-xml
#c# #linq-to-xml
Вопрос:
У меня есть некоторый XML, который выглядит примерно так:
<root>
<item>Banana</item>
<item>Apple</item>
<item>Cherry</item>
</root>
Это не те фактические данные, которые у меня есть, но они будут служить цели здесь. Что я хочу сделать, это использовать Linq to SQL для изменения порядка XML, чтобы дочерние узлы располагались в алфавитном порядке, например.
<root>
<item>Apple</item>
<item>Banana</item>
<item>Cherry</item>
</root>
Я хочу иметь возможность затем вызвать ToString()
исходный XDocument и заставить его вернуть второй набор XML, как показано выше. Есть ли простой способ сделать это? Я пробовал искать, но безуспешно.
Ответ №1:
Возможно:
var reordered = new XElement(
"root",
xdoc.Root.Elements("item")
.OrderBy(x => x.Value)
.Select(x => new XElement("item", x.Value)));
Или немного более гибкий (хотя и поддерживающий только 1 вложенный уровень):
var reordered = new XElement(
xdoc.Root.Name,
xdoc.Root.Elements()
.OrderBy(x => x.Value)
.Select(x => new XElement(x.Name, x.Value)));
Комментарии:
1. @Дилан: всегда пожалуйста. Прелесть XLinq заключается в расширяемости конструкторов различных объектов. Я предлагаю прочитать функциональную конструкцию LINQ-to-XML , чтобы узнать больше.
2. Спасибо за ссылку. Проблема для меня заключалась в том, что я думал об этом под неправильным углом; я пытался изменить существующий XML, а не думал о создании нового XML для его замены.