いろいろ備忘録日記

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

Linq入門記-75 (LINQ to XML, 前後存在確認, IsBefore, IsAfter)

LINQ to XMLでの前後存在確認系のメソッドについて.

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


今回のIsBeforeとIsAfterはどちらも存在を確認するために利用するプロパティです。
どちらもXNodeクラスに属するメソッドです。
IsBeforeは自分自身が引数で指定したノードより前に存在するか否かを返します。
IsAfterは自分自身が引数で指定したノードより後に存在するか否かを返します。


以下、サンプルです。

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

  #region LinqSamples-71
  /// <summary>
  /// LINQ to XMLのサンプルです.
  /// </summary>
  /// <remarks>
  /// 前後存在確認プロパティ (IsBefore, IsAfter) のサンプルです.
  /// </remarks>
  public class LinqSamples71 : IExecutable
  {
    public void Execute()
    {
      //
      // XNode.IsBefore(XNode)
      //   自分自身が引数に指定した要素の前に表示されるか否かを判定する
      //
      var root = BuildSampleXml();
      var elem1 = root.Elements("Child").Where(x => x.Value == "value1").First();
      var elem2 = root.Elements("Child").Where(x => x.Value == "value2").First();
      var elem4 = root.Elements("Child").Where(x => x.Value == "value4").First();

      Console.WriteLine("Child2 before Child1 = {0}", elem2.IsBefore(elem1));
      Console.WriteLine("Child4 before Child2 = {0}", elem4.IsBefore(elem2));
      Console.WriteLine("Child1 before Child2 = {0}", elem1.IsBefore(elem2));
      Console.WriteLine("Child1 before Child4 = {0}", elem1.IsBefore(elem4));
      Console.WriteLine("Child2 before Child4 = {0}", elem2.IsBefore(elem4));

      Console.WriteLine("=====================================");

      //
      // XNode.IsAfter(XNode)
      //   自分自身が引数に指定した要素の後に表示されるか否かを判定する
      //
      root = BuildSampleXml();
      elem1 = root.Elements("Child").Where(x => x.Value == "value1").First();
      elem2 = root.Elements("Child").Where(x => x.Value == "value2").First();
      elem4 = root.Elements("Child").Where(x => x.Value == "value4").First();

      Console.WriteLine("Child2 after Child1 = {0}", elem2.IsAfter(elem1));
      Console.WriteLine("Child4 after Child2 = {0}", elem4.IsAfter(elem2));
      Console.WriteLine("Child1 after Child2 = {0}", elem1.IsAfter(elem2));
      Console.WriteLine("Child1 after Child4 = {0}", elem1.IsAfter(elem4));
      Console.WriteLine("Child2 after Child4 = {0}", elem2.IsAfter(elem4));
    }

    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
}

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

  Child2 before Child1 = False
  Child4 before Child2 = False
  Child1 before Child2 = True
  Child1 before Child4 = True
  Child2 before Child4 = True
  =============================
  Child2 after Child1 = True
  Child4 after Child2 = True
  Child1 after Child2 = False
  Child1 after Child4 = False
  Child2 after Child4 = False

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

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

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