重新排序XML节点

时间:2011-06-13 16:24:08

标签: 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>

我希望能够在原始XDocument上调用ToString()并让它返回第二组XML,如上所示。有一个简单的方法吗?我试过搜索,但没有运气。

1 个答案:

答案 0 :(得分:2)

也许:

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)));