LINQ to XMLでのナビゲーション系のプロパティについて.
過去の内容は以下から見れます。よろしければご参照くださいませ。
今回は兄弟ノードを取得するNodesAfterSelfとNodesBeforeSelfです。
どちらも前回のElementsAfterSelf, ElementsBeforeSelfメソッドと挙動が似ています。
違いは、取得できるのがXElementであるかXNodeであるかどうかです。
NodesAfterSelf, NodesBeforeSelfメソッドは、XNodeクラスに所属するメソッドです。
名前の通り自分自身も含めて結果を返してきます。
以下、サンプルです。
namespace Gsf.Samples { using System; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; #region LinqSamples-80 /// <summary> /// LINQ to XMLのサンプルです. /// </summary> /// <remarks> /// ナビゲーション(NodesAfterSelf, NodesBeforeSelf)のサンプルです. /// </remarks> public class LinqSamples80 : IExecutable { public void Execute() { // // NodesAfterSelf // 現在の要素の後ろにある兄弟ノードを取得 // ElementsAfterSelfとの違いは、XElementであるかXNodeであるか // var root = BuildSampleXml(); var startingPoint = root.Descendants("Book").First(); foreach (var node in startingPoint.NodesAfterSelf()) { Console.WriteLine(node); } Console.WriteLine("====================================="); root = BuildSampleXml(); startingPoint = root.Descendants("Title").Last(); foreach (var node in startingPoint.NodesAfterSelf()) { Console.WriteLine(node); } // // NodesBeforeSelf // 現在の要素の前にある兄弟ノードを取得 // ElementsBeforeSelfとの違いは、XElementであるかXNodeであるか // root = BuildSampleXml(); startingPoint = root.Descendants("PublishDate").Last(); foreach (var node in startingPoint.NodesBeforeSelf()) { Console.WriteLine(node); } } 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. 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. Garcia, Debra Midnight Rain Fantasy 5.95
以下、参考リソースです.
- XNode.NodesAfterSelf メソッド
- XNode.NodesBeforeSelf メソッド
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場