LINQ to XMLでのナビゲーション系のプロパティについて.
過去の内容は以下から見れます。よろしければご参照くださいませ。
今回は子孫ノードを取得するDescendantNodeメソッドと先祖要素を取得するDescendantNodesAndSelfメソッドです。
どちらもDescendantsメソッドとDescendantsAndSelfメソッドのノード版みたいなものです。
DescendantNodesメソッドは、XContainerクラスに所属するメソッドです。
DescendantNodesAndSelfメソッドは、XElementクラスに所属するメソッドです。
AndSelf版の方は、名前の通り自分自身も含めて結果を返してきます。
以下、サンプルです。
namespace Gsf.Samples { using System; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; #region LinqSamples-78 /// <summary> /// LINQ to XMLのサンプルです. /// </summary> /// <remarks> /// ナビゲーション(DescendantNodes, DescendantNodesAndSelf)のサンプルです. /// </remarks> public class LinqSamples78 : IExecutable { public void Execute() { // // DescendantNodes // 子孫をXNodeで取得する. // 属性はノードではないため、含まれない. // // 取得できるデータがXElementではなく、XNodeであることに注意. // var root = BuildSampleXml(); var startingPoint = root.Descendants("Book").First(); // AndSelf無しなので、Book自身は含まれない. foreach (var node in startingPoint.DescendantNodes()) { Console.WriteLine(node); } Console.WriteLine("====================================="); // // DescendantNodesAndSelf // 基本的な動作はDescendantNodesと同じ。 // AndSelfなので、自分自身もついてくる. // // 取得できるデータがXElementではなく、XNodeであることに注意. // root = BuildSampleXml(); startingPoint = root.Descendants("Book").First(); // AndSelfありなので、Book自身が含まれる foreach (var node in startingPoint.DescendantNodesAndSelf()) { Console.WriteLine(node); } Console.WriteLine("====================================="); } XElement BuildSampleXml() { // // サンプルXMLファイル // see: http://msdn.microsoft.com/ja-jp/library/vstudio/ms256479(v=vs.90).aspx // return XElement.Load(@"xml/Books.xml"); } } #endregion }
実行すると以下のようになります。
Garghentini, Davide Garghentini, DavideXML Developer's Guide XML Developer's GuideComputer Computer44.95 44.952000-10-01 2000-10-01An in-depth look at creating applications with XML. 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. Garghentini, Davide Garghentini, DavideXML Developer's Guide XML Developer's GuideComputer Computer44.95 44.952000-10-01 2000-10-01An in-depth look at creating applications with XML. An in-depth look at creating applications with XML. =====================================
以下、参考リソースです.
- XContainer.DescendantNodes メソッド
- XElement.DescendantNodesAndSelf メソッド
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場