2011-06-13 156 views
2

我有一些XML看起来是这样的:重新排列XML节点

​​

它不是实际的数据我也有,但它会在这里服务宗旨。我想要做的是使用Linq to SQL重新排序XML,以便子节点按字母顺序排列,例如。

<root> 
    <item>Apple</item> 
    <item>Banana</item> 
    <item>Cherry</item> 
</root> 

我希望能够再调用ToString()原始的XDocument,并使其返回XML的第二组,如上图所示。有没有一个简单的方法来做到这一点?我试过寻找,但没有这样的运气。

回答

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

完美的作品,谢谢。 – 2011-06-13 16:35:58

+0

@Dylan:不客气。 XLinq的美妙之处在于各种对象的构造函数的可扩展性。我建议阅读[功能性结构LINQ-to-XML](http://msdn.microsoft.com/zh-cn/library/bb387019.aspx)以了解更多信息。 – user7116 2011-06-13 16:38:41

+0

感谢您的链接。我面临的问题是我从错误的角度思考它,我试图改变现有的XML,而不是想创建新的XML来替换它。 – 2011-06-13 16:46:36