重新排列XML节点

本文关键字:XML 节点 排列 新排列 | 更新日期: 2023-09-27 17:58:57

我有一些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,如上所示。有简单的方法吗?我试过找,但没有这样的运气。

重新排列XML节点

也许:

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