2011-06-13 72 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