Сортировка / упорядочение узлов в xml с использованием IComparer
Мне нужно отсортировать узлы в XML. У меня есть следующий код, который успешно упорядочивает их в алфавитном порядке. Тем не менее, большая часть данных является числовой, хотя строки допускаются. У меня есть настроенный IComparer, который работает для правильной сортировки данных, так как я хочу, чтобы они появлялись в другом месте.
System.Xml.Linq.XDocument output = new System.Xml.Linq.XDocument(
new System.Xml.Linq.XElement("xml",
from node in input.Root.Elements("training")
orderby node.Attribute("order").Value
select node));
Я нашел, как использовать IComparer в вызове метода, .OrderBy(x => x, new CustomComparer())
Но я не понял, как заставить это работать с XML. Из того, что я прочитал онлайн, не похоже, что я могу вызвать IComparer из синтаксиса запроса.
1 ответ
Решение
Вы правы, вы не можете использовать эту перегрузку из выражения запроса orderby
пункт. К счастью, ваш запрос довольно прост, поэтому вы можете просто использовать:
// Have a using directive for System.Xml.Linq - it'll make everything simpler!
XDocument output = new XDocument(
new XElement("xml",
input.Root
.Elements("training")
.OrderBy(node => node.Attribute("order)".Value, comparer)));