要素を並べ替える方法 (LINQ to XML)

XML にクエリを実行するとき、結果を並べ替えることができます。 この記事では、2 つの例を取り上げます。最初の例では、名前空間に "属さない" XML に対して結果を並べ替えます。2 番目も並べ替えは同じですが、ある名前空間に "属する" XML が対象になります。

例: その結果を並べ替えるクエリを記述する

この例では、結果を並べ替えるクエリの作成方法を示します。 XML ドキュメント「サンプル XML ファイル: 数値データ」が使用されます。

XElement root = XElement.Load("Data.xml");
IEnumerable<decimal> prices =
    from el in root.Elements("Data")
    let price = (decimal)el.Element("Price")
    orderby price
    select price;
foreach (decimal el in prices)
    Console.WriteLine(el);
Dim root As XElement = XElement.Load("Data.xml")
Dim prices As IEnumerable(Of Decimal) = _
    From el In root.<Data> _
    Let price = Convert.ToDecimal(el.<Price>.Value) _
    Order By (price) _
    Select price
For Each el As Decimal In prices
    Console.WriteLine(el)
Next

この例を実行すると、次の出力が生成されます。

0.99
4.95
6.99
24.50
29.00
66.00
89.99

例: ある名前空間を対象とするクエリで、その結果を並べ替えるクエリを記述する

次の例では同じクエリを確認できますが、ある名前空間にある XML が対象になっています。 XML ドキュメント「サンプル XML ファイル: 名前空間内の数値データ」が使用されます。

詳細については、「名前空間の概要」を参照してください。

XElement root = XElement.Load("DataInNamespace.xml");
XNamespace aw = "http://www.adatum.com";
IEnumerable<decimal> prices =
    from el in root.Elements(aw + "Data")
    let price = (decimal)el.Element(aw + "Price")
    orderby price
    select price;
foreach (decimal el in prices)
    Console.WriteLine(el);
Imports <xmlns='http://www.adatum.com'>

Module Module1
    Sub Main()
        Dim root As XElement = XElement.Load("DataInNamespace.xml")
        Dim prices As IEnumerable(Of Decimal) = _
            From el In root.<Data> _
            Let price = Convert.ToDecimal(el.<Price>.Value) _
            Order By (price) _
            Select price
        For Each el As Decimal In prices
            Console.WriteLine(el)
        Next
    End Sub
End Module

この例を実行すると、次の出力が生成されます。

0.99
4.95
6.99
24.50
29.00
66.00
89.99

関連項目