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

いろいろ備忘録日記

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

Linq入門記-76 (LINQ to XML, 空要素, IsEmpty, EmptySequence)

LINQ to XMLでの空要素系のプロパティについて.

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


今回のIsEmptyとEmptySequenceはどちらも空要素に関連するプロパティです。
EmptySequenceは文字通り空のシーケンスを返します。これはEnumerable.Emptyと同じようなものです。
IsEmptyは自分自身が空要素か否かを判定します。どのような要素が空要素と見なされるのかはMSDNに記載があります。
以下、(http://msdn.microsoft.com/ja-jp/library/system.xml.linq.xelement.isempty.aspx)より抜粋。

開始タグと終了タグの間に内容のない要素は、空の要素とは見なされません。長さのない内容を持っていることになります。
開始タグのみを持ち、終了した空の要素として表される要素だけが、空の要素と見なされます。

以下、サンプルです。

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

  #region LinqSamples-72
  /// <summary>
  /// LINQ to XMLのサンプルです.
  /// </summary>
  /// <remarks>
  /// 空要素系プロパティとメソッド (IsEmpty, EmptySequence) のサンプルです.
  /// </remarks>
  public class LinqSamples72 : IExecutable
  {
    public void Execute()
    {
      //
      // EmptySequence
      //   空のIEnumerable<XElement>を返す静的メソッド.
      //
      var empty = XElement.EmptySequence;

      Console.WriteLine("Count={0}", empty.Count());

      //
      // IsEmpty
      //   現在の要素が空要素か否かを判定する.
      //   空要素の条件は、MSDNに記載があり以下の通りとなる.
      //     「開始タグのみを持ち、終了した空の要素として表される要素だけが、空の要素と見なされます。」
      //     (http://msdn.microsoft.com/ja-jp/library/system.xml.linq.xelement.isempty.aspx)
      //
      var root = BuildSampleXmlNoNode();
      Console.WriteLine("IsEmpty={0}", root.IsEmpty);

      root = BuildSampleXml();
      Console.WriteLine("IsEmpty={0}", root.IsEmpty);
    }

    XElement BuildSampleXmlNoNode()
    {
      return new XElement("Root");
    }

    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
}


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

  Count=0
  IsEmpty=True
  IsEmpty=False


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

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

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