【问题标题】:Reorder XML nodes重新排序 XML 节点
【发布时间】:2011-06-14 00:28:41
【问题描述】:

我有一些看起来像这样的 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,如上所示。有没有一种简单的方法可以做到这一点?我试过搜索,但没有这样的运气。

【问题讨论】:

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

    【讨论】:

    • @Dylan:不客气。 Xlinq 的美妙之处在于各种对象的构造函数的可扩展性。我建议阅读Functional Construction LINQ-to-XML 以了解更多信息。
    • 感谢您的链接。对我来说,问题是我从错误的角度考虑它。我试图更改现有的 XML,而不是考虑创建新的 XML 来替换它。
    猜你喜欢
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    相关资源
    最近更新 更多