LINQ to XMLでの並び順を整えるメソッドについて.
過去の内容は以下から見れます。よろしければご参照くださいませ。
今回は、要素のコレクションをドキュメント内の並び順に合わせるInDocumentOrder拡張メソッドについてです。
このメソッドを利用すると、たとえばバラバラになっている要素のコレクションを元のドキュメント内での並び順に
することができます。
このメソッドは拡張メソッドとなっており、本体は以下のクラスに定義されています。
System.Xml.Linq.Extensions
メソッドの書式は以下のようになっています。
public static IEnumerable
InDocumentOrder (
this IEnumerablesource
)
where T : XNode
以下、サンプルです。
namespace Gsf.Samples { using System; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; #region LinqSamples-81 /// <summary> /// LINQ to XMLのサンプルです. /// </summary> /// <remarks> /// ドキュメント順に並び替え(InDocumentOrder)のサンプルです. /// </remarks> public class LinqSamples81 : IExecutable { public void Execute() { // // InDocumentOrder<T> where T : XNode (拡張メソッド) // 元のシーケンスをドキュメント内の順序に従うよう並び替える. // var root = BuildSampleXml(); var reversed = root.Elements().Reverse(); // Reverseしているので逆順で表示される foreach (var elem in reversed) { Console.WriteLine(elem); } Console.WriteLine("====================================="); // InDocumentOrderを行うことにより、要素が正しい順序に並び替えられる foreach (var elem in reversed.InDocumentOrder()) { Console.WriteLine(elem); } Console.WriteLine("====================================="); // 特定の要素をピックアップして、シーケンス作成。わざと順序を変えている. XElement[] elemList = { root.Descendants("Title").Last(), root.Descendants("Title").First() }; // そのまま表示すると当然順序は変わったまま foreach (var elem in elemList) { Console.WriteLine(elem); } Console.WriteLine("====================================="); // InDocumentOrderを付けることにより、ドキュメント内の正しい順序に並び替えられる foreach (var elem in elemList.InDocumentOrder()) { Console.WriteLine(elem); } } XElement BuildSampleXml() { // // サンプルXMLファイル // see: http://msdn.microsoft.com/ja-jp/library/vstudio/ms256479(v=vs.90).aspx // return XElement.Load(@"xml/Books.xml"); } } #endregion }
実行すると以下のようになります。
Garcia, Debra Midnight Rain Fantasy 5.95 2000-12-16 A former architect battles corporate zombies, an evil sorceress, and her own childhood to become queen of the world. ===================================== Garghentini, Davide XML Developer's Guide Computer 44.95 2000-10-01 An in-depth look at creating applications with XML. Garghentini, Davide XML Developer's Guide Computer 44.95 2000-10-01 An in-depth look at creating applications with XML. ===================================== Garcia, Debra Midnight Rain Fantasy 5.95 2000-12-16 A former architect battles corporate zombies, an evil sorceress, and her own childhood to become queen of the world. Midnight Rain XML Developer's Guide =====================================XML Developer's Guide Midnight Rain
以下、参考リソースです.
- Extensions.Descendants Method
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場