使用IComparer对xml中的节点进行排序/排序

时间:2012-06-29 21:56:13

标签: c# xml linq 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));

我已经找到了如何在方法调用.OrderBy(x => x, new CustomComparer())中使用IComparer但是,我还没弄明白如何使用xml。从我在网上看到的,看起来我不能从查询语法中调用IComparer。

1 个答案:

答案 0 :(得分:4)

您是对的,您不能使用查询表达式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)));