XMLドキュメントを簡単かつ効率的に作成・参照・更新できるようにするLinq to XMLを利用してXMLファイルを操作する。

 

using句の指定(C#の場合)

using句でLinq to XMLの名前空間を呼出しておく。

尚、Visual Studioのソリューションエクスプローラで参照設定を確認し、System.XML.Linqの参照設定がない場合には追加する。

 

単純なXMLの表示

簡単なXMLのデータを作成し、コンソールに表示する。

Nameという1種類の要素を持つXMLデータを作成し、コンソールに表示している。

Linq to XMLにおいて、XElementクラスがXML要素を表すクラスになる。

尚、Linq to XMLの各クラスは先頭に”X”がつく。

 

XML要素に属性を追加して表示

XML要素に属性(Attribute)を追加する。

XElementクラスのコンストラクタの中でXAttributeクラスを初期化し、IDという属性とその値として”99999″を追加する。

Name要素にID属性が追加され、その値が”99999″となっている。

 

XElementクラスのAddメソッドを使用して属性を追加

XElementクラスのAddメソッドを使用して、XML要素に属性(Attribute)を追加する。

 

XML文書を作成する

Linq to XMLでXML文書(XML Document)を表すクラスはXDocumentクラスになる。

上記はXDocumentクラスのコンストラクタですべてを記述している。

この程度であれば問題ないが、これ以上大きなXML文書を扱うには視認性が悪い。

尚、途中に出てくるXDeclarationクラスはXML宣言のクラス。

 

XML文書を作成する(ノードごとに記述)

コードの視認性を良くする為にノードごとにXML要素を追加する。

XML宣言を表すXDeclarationクラスのインスタンスはXDocumentクラスのコンストラクタの引数に渡す必要がある。

後からXDocumentクラスのAddメソッドで追加することは出来ない。(実行時エラーとなる)

また、XCommentクラスを使用するとXMLコメントを追加することが出来る。

 

XML文書の保存

XML文書を保存するにはXDocumentクラスのSaveメソッドを使用する。

上記の他にXMLWriterに渡して非同期で出力する方法、TextWriterに渡して同じく非同期で出力する方法、出力時に空白を削除する/しないのオプションがある。

 

XMLファイルの読込み

XMLファイルからデータを読込むには、XDocumentクラスのLoadメソッドを使用する。

LoadメソッドもSaveメソッドと同様にオーバーロードされたメソッドがあり、URI指定によるXMLファイルの読込みやXMLReader、TextReaderからの読込みがサポートされている。

 

クエリ式を使用したLINQの記述

Linq to XMLなので勿論、LINQによるXML要素の取得が可能。

LINQの基本的なクエリ式は、以下の通り。

クエリ式はまず、from句から始める必要がある。

次に最低でもselect句で範囲変数を指定し、最終的に式が返すソースシーケンスの内容を確定する。

from句
from [範囲変数] in [データソース]

from句ではクエリもしくはサブクエリの対象となるデータソースとソースシーケンス内の各要素を表すローカルの範囲変数を指定する。

尚、ソースシーケンスとはデータソースの中でクエリ式内での各操作の対象となる連続したデータのこと。

LINQのデータソースにはIEnumerable<T>インターフェイスあるいはIEnumerableとその派生インターフェイスを実装したオブジェクトだけを指定することができる。

通常の配列やArrayList、ADO.NETのデータセットはIEnumerableインターフェイスを持つ為、LINQの対象とすることができる。

selsct句
select [式]

selsct句はクエリ式が実行されたときに生成される値の型を指定する。

クエリ式の結果はselect句の前の式の評価およびselect句の式の評価によって生成される。

select句の一番単純な例は式に範囲変数を指定し、ソースシーケンスをそのまま式の値とする方法。

where句
whewe [条件式]

where句を利用することで、ソースシーケンスのデータに対して何らかのフィルタリング条件を付けて必要なデータだけを取得することが出来る。

通常、特定の要素を検索対象とするには正確に木構造を辿る形で指定していく必要がある。

しかし、Linq to XMLではDescendantsで要素名を指定すれば木構造を辿らずダイレクトに指定する事が出来る。

上記は、ID属性が”88888″のユーザ情報をコンソールに表示している。

 

メソッドベースでのLINQの記述

メソッドベースでもLINQの記述が可能。

上記は、ID属性が”99999″のユーザ情報をコンソールに表示している。