すごく久しぶりの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 }
以下、参照リソースです。
- XDocumentクラス
- LoadOptions列挙体
- XAttributeクラス
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場