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

いろいろ備忘録日記

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

Linq入門記-68 (LINQ to XML, 属性の取得, FirstAttribute, LastAttribute, Attribute, Attributes)

C# Linq

LINQ to XMLでの属性の取得について.

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


XElementには、属性の取得を行うためのメソッドがいくつか存在します。

FirstAttribute { get; }
LastAttribute  { get; }
Attribute(XName)
Attributes()
Attributes(XName)


元定義は以下のようになっています。

XElement.FirstAttribute { get; }
XElement.LastAttribute  { get; }
XElement.Attribute(XName)
XElement.Attributes()
XElement.Attributes(XName)


特に注意が必要なメソッドはありません。
名前の通りの動きをしてくれます。


以下、サンプルです。

  #region LinqSamples-64
  /// <summary>
  /// LINQ to XMLのサンプルです.
  /// </summary>
  /// <remarks>
  /// 属性取得系メソッドのサンプルです.
  /// </remarks>
  public class LinqSamples64 : IExecutable
  {
    public void Execute()
    {
      //
      // FirstAttribute
      //   現在の要素の最初の属性を取得する.
      //
      var root = BuildSampleXml();
      var elem = root.Elements("Child").First();
      
      var attr = elem.FirstAttribute;
      
      Console.WriteLine(attr);
      Console.WriteLine("{0}=\"{1}\"", attr.Name, attr.Value);
      Console.WriteLine("=====================================");
      
      //
      // LastAttribute
      //   現在の要素の最後の属性を取得する.
      //
      root = BuildSampleXml();
      elem = root.Elements("Child").First();
      
      attr = elem.LastAttribute;
      
      Console.WriteLine(attr);
      Console.WriteLine("=====================================");
      
      //
      // Attribute(XName)
      //   指定した名称を持つ属性を取得する.
      //
      root = BuildSampleXml();
      elem = root.Elements("Child").First();
      
      attr = elem.Attribute("Id2");
      
      Console.WriteLine(attr);
      Console.WriteLine(elem.Attribute("Id3") == null);
      Console.WriteLine("=====================================");
      
      //
      // Attributes()
      //   要素が持つ属性をすべて取得する.
      //
      root = BuildSampleXml();
      elem = root.Elements("Child").First();
      
      var attrs = elem.Attributes();
      
      Console.WriteLine("Count={0}", attrs.Count());
      foreach (var a in attrs)
      {
        Console.WriteLine("\t{0}", a);
      }
      
      Console.WriteLine("=====================================");
      
      //
      // Attributes(XName)
      //   指定した名称に一致する属性を取得する.
      //   主にXElementのシーケンスに対して利用する.
      //
      root = BuildSampleXml();
      var elems = root.Descendants();
      
      attrs = elems.Attributes("Id");
      
      Console.WriteLine("Count={0}", attrs.Count());
      foreach (var a in attrs)
      {
        Console.WriteLine("\t{0}", a);
      }
      
      Console.WriteLine("=====================================");
    }
    
    XElement BuildSampleXml()
    {
      return XElement.Parse("<Root><Child Id=\"100\" Id2=\"200\"><Value Id=\"300\">hoge</Value></Child></Root>");
    }
  }
  #endregion

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

  Id="100"
  Id="100"
  =====================================
  Id2="200"
  =====================================
  Id2="200"
  True
  =====================================
  Count=2
  	Id="100"
  	Id2="200"
  =====================================
  Count=2
  	Id="100"
  	Id="300"
  =====================================


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

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

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