読者です 読者をやめる 読者になる 読者になる

いろいろ備忘録日記

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

Linq入門記-77 (LINQ to XML, ナビゲーション, PreviousNode, NextNode)

C# Linq

LINQ to XMLでのナビゲーション系のプロパティについて.

過去の内容は以下から見れます。よろしければご参照くださいませ。


今回のPreviousNodeとNextNodeはどちらもナビゲーションに関連するプロパティです。
どちらもXNodeに所属するプロパティです。


PreviousNodeは、現在の要素の一つ前の兄弟要素を取得します。
NextNodeは、一つ後の兄弟要素を取得します。
兄弟要素というのは、自分と同じ階層位置に存在するノードの事です。
どちらのメソッドも、該当要素が存在しない場合はnullが返却されます。


以下、サンプルです。

namespace Gsf.Samples
{
  using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Xml.Linq;

  #region LinqSamples-73
  /// <summary>
  /// LINQ to XMLのサンプルです.
  /// </summary>
  /// <remarks>
  /// ナビゲーション(PreviousNode, NextNodeプロパティ)のサンプルです.
  /// </remarks>
  public class LinqSamples73 : IExecutable
  {
    public void Execute()
    {
      //
      // PreviousNode
      //   現在の要素の一つ前の兄弟要素を取得する
      //   一つ前の要素が存在しない場合は、nullとなる。
      //
      var root = BuildSampleXml();
      var elem = root.Elements("Child").Where(x => x.Value == "value2").First();

      Console.WriteLine("Prev node = {0}", elem.PreviousNode);

      elem = root.Elements("Child").First();
      Console.WriteLine("Prev node = {0}", elem.PreviousNode == null);

      //
      // NextNode
      //   現在の要素の一つ後の兄弟要素を取得する
      //   一つ後の要素が存在しない場合は、nullとなる
      //
      root = BuildSampleXml();
      elem = root.Elements("Child").Where(x => x.Value == "value3").First();

      Console.WriteLine("Next node = {0}", elem.NextNode);

      elem = root.Elements("Child").Last();
      Console.WriteLine("Next node = {0}", elem.NextNode == null);
    }

    XElement BuildSampleXml()
    {
      var root = new XElement("Root",
        new XElement("Child", "value1"),
        new XElement("Child", "value2"),
        new XElement("Child", "value3"),
        new XElement("Child", "value4")
      );

      return root;
    }
  }
  #endregion
}


実行すると以下のようになります。

  Prev node = value1
  Prev node = True
  Next node = value4
  Next node = True


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

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

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