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

いろいろ備忘録日記

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

Linq入門記-74 (LINQ to XML, 存在確認, HasElements, HasAttributes)

C# Linq

LINQ to XMLでの存在確認系のプロパティについて.

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


今回のHasElementsとHasAttributesはどちらも存在を確認するために利用するプロパティです。
名前が示す通り、HasElementsは子要素を持っているか否かを
HasAttributesは属性を持っているか否かを返します。


以下、サンプルです。

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

  #region LinqSamples-70
  /// <summary>
  /// LINQ to XMLのサンプルです.
  /// </summary>
  /// <remarks>
  /// 存在確認プロパティ (HasElements, HasAttributes) のサンプルです.
  /// </remarks>
  public class LinqSamples70 : IExecutable
  {
    public void Execute()
    {
      //
      // HasElements
      //   名前の通り、現在のノードがサブノードを持っているか否かを取得する.
      //
      var root = BuildSampleXml();
      var child = root.Elements("Child").First();
      var grandChild = child.Elements("Value").First();

      Console.WriteLine("root.HasElements: {0}", root.HasElements);
      Console.WriteLine("child.HasElements: {0}", child.HasElements);
      Console.WriteLine("grand-child.HasElements: {0}", grandChild.HasElements);

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

      //
      // HasAttributes
      //   名前の通り、現在のノードが属性を持っているか否かを取得する.
      //
      root = BuildSampleXml();
      child = root.Elements("Child").First();
      grandChild = child.Elements("Value").First();

      Console.WriteLine("root.HasAttributes:{0}", root.HasAttributes);
      Console.WriteLine("child.HasAttributes:{0}", child.HasAttributes);
      Console.WriteLine("grand-child.HasAttributes:{0}", grandChild.HasAttributes);

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

    XElement BuildSampleXml()
    {
      return XElement.Parse("<Root><Child Id=\"100\" Id2=\"200\"><Value Id=\"300\">hoge</Value></Child></Root>");
    }
  }
  #endregion
}

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

  root.HasElements: True
  child.HasElements: True
  grand-child.HasElements: False
  =====================================
  root.HasAttributes:False
  child.HasAttributes:True
  grand-child.HasAttributes:True
  =====================================

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

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

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