いろいろ備忘録日記

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

Linq入門記-54 (LINQ to XML, XDocument, Parse, 文字列から構築)


すごく久しぶりのLinq入門記です。
今回から、LINQ to XMLについてメモしていこうと思ってます。


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

サンプルコードは、まとめてCodePlexにアップしてます。


以前、LINQ to Objectについてざらっと記述していたのですが
LINQ to XMLについては、私自身がいつもXmlSerializerでバコッと
シリアライズして利用する方法ばかり使っていたので、ちゃんと
勉強してませんでした・・・。やっぱりXMLでもLINQ使いたいので
勉強しながら、ここにメモしていこうと思っております。


最初はXDocumentオブジェクトの構築方法から。
今回は文字列から構築。
文字列からXDocumentを構築するには

public static XDocument Parse(
	string text
)

public static XDocument Parse(
	string text,
	LoadOptions options
)

を利用します。


XDocumentまたはXElementが取れれば、後はLINQ to Objectsと同じような
感じでXMLをナビゲートしたり出来ます。


尚、LINQ to XMLのクラスは

System.Xml.Linq

名前空間に属しています。


以下、サンプルです。

  #region LinqSamples-51
  /// <summary>
  /// LINQ to XMLのサンプルです。
  /// </summary>
  /// <remarks>
  /// 文字列からXDocumentオブジェクトを構築するサンプルです。
  /// </remarks>
  public class LinqSamples51 : IExecutable
  {
    public void Execute()
    {
      //
      // LINQ to XMLは、LINQを利用してXMLを扱うためのAPIである。
      // インメモリXMLノードの管理及びクエリ実行が可能。
      //
      // LINQ to XMLでは、まず最初にXDocumentオブジェクトまたはXElementを構築する.
      // XDocumentオブジェクトの構築には
      //   ・ファイルから読み込み
      //   ・文字列から構築
      //   ・関数型構築
      //   ・新規作成
      // 等の方法がある。
      //
      // 本サンプルでは、文字列からXDocumentオブジェクトを取得している.
      //

      //
      // 文字列からXDocumentを構築するには、Parseメソッドを利用する.
      // LoadOptionには、以下の値が設定出来る.
      //   None              : 意味の無い空白の削除、及び、ベースURIと行情報の読み込み無し
      //   PreserveWhitespace: 意味の無い空白保持
      //   SetBaseUri        : ベースURIの保持
      //   SetLineInfo       : 行情報の保持
      //
      var doc = XDocument.Parse(MakeSampleXml(), LoadOptions.None);
      
      //
      // 特定の要素の表示.
      //
      var query = from   elem in doc.Descendants("Person")
                  let    name = elem.Attribute("name").Value
                  where  name.StartsWith("b")
                  select new { name };
      
      foreach (var item in query)
      {
        Console.WriteLine(item);
      }
    }
    
    string MakeSampleXml()
    {
      var xmlStrings = 
            @"<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
              <Persons>
                <Person name='foo'/>
                <Person name='bar'/>
                <Person name='baz'/>
              </Persons>";
      
      return xmlStrings;
    }
  }
  #endregion


実行結果は以下のようになります。

  { name = bar }
  { name = baz }


以下、参照リソースです。

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

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