2013-07-29 14 views
1

這是我當前的代碼,它從XML獲取元素並將其放入數組中。但它只是把它放在它讀取它(從上到下)順序在將數組轉換爲數組之前,可以通過屬性對XML進行排序?

using System.Xml; 
using System.Xml.Linq; 

// XML Path 
var doc = XDocument.Load("C:/Scripts/example.xml"); 

// Node 
string[] picks = doc.Descendants("pick").Select(element => element.Value).ToArray(); 

我想知道是否有可能通過一個屬性對數組進行排序(在這種情況下,「訂單」)爲我打開它變成一個數組。所需的輸出是{Gragas,Draven,瑞澤,沉Shyvanna,...}

,這裏是我的xml:

<championSelect> 
<blue> 
    <pick order="1">Gragas</pick> 
    <pick order="4">Shen</pick> 
    <pick order="5">Shyvanna</pick> 
    <pick order="8">Garen</pick> 
    <pick order="9">Karthus</pick> 
</blue> 
<red> 
    <pick order="2">Draven</pick> 
    <pick order="3">Ryze</pick> 
    <pick order="6">Ahri</pick> 
    <pick order="7">Annie</pick> 
    <pick order="10">Brand</pick> 
</red> 

我用的OrderBy()和OrderByDescending(玩)具點點運氣

+0

爲什麼不使用排序依據befor e .ToArray? –

+0

將它變成一個數組,然後對其進行排序。對數組進行排序比對XML進行排序更有意義(這可能使用一些抽象(如LINQ to XML),但不是沒有意義,也沒有意義)。 – evanmcdonnal

+0

@evanmcdonnal把它變成一個數組首先不會在這裏工作,因爲OP想排序的值不會在最終數組 – JaredPar

回答

3

使用OrderBy擴展方法

string[] picks = doc 
    .Descendants("pick") 
    .OrderBy(element => Int32.Parse(element.GetAttribute("order").Value)) 
    .Select(element => element.Value) 
    .ToArray(); 
+0

+1,但它應該是'OrderBy(element => Int32.Parse(element .Attribute(「order」)。Value)'我想。 – keyboardP

+0

@keyboardP我相信我是正確的。'GetAttribute'方法返回'string',而'GetAttributeNode'返回'AttributeNode'類型。調用'Value' – JaredPar

+0

@keyboardP這裏是MSDN頁面http://msdn.microsoft.com/en-us/library/acwfyhc7.aspx – JaredPar

相關問題