いろいろ備忘録日記

主に .NET と Python絡みのメモを公開しています。

Linq入門記-82 (LINQ to XML, ナビゲーション, DescendantNodes, DescendantNodesAndSelf)

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, Davide
 <a class="keyword" href="http://d.hatena.ne.jp/keyword/XML">XML</a> Developer's Guide
 XML Developer's Guide
 Computer
 Computer
 44.95
 44.95
 2000-10-01
 2000-10-01
 An in-depth look at creating applications
       with XML.
 An in-depth look at creating applications
       with XML.
 =====================================
 
   Garghentini, Davide
   <a class="keyword" href="http://d.hatena.ne.jp/keyword/XML">XML</a> Developer's Guide
   Computer
   44.95
   2000-10-01
   An in-depth look at creating applications
       with XML.
 
 Garghentini, Davide
 Garghentini, Davide
 <a class="keyword" href="http://d.hatena.ne.jp/keyword/XML">XML</a> Developer's Guide
 XML Developer's Guide
 Computer
 Computer
 44.95
 44.95
 2000-10-01
 2000-10-01
 An in-depth look at creating applications
       with XML.
 An in-depth look at creating applications
       with XML.
 =====================================

以下、参考リソースです.

================================
過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。