DOM(Document Object Model)は、XMLデータのあらゆる要素をノードとしてとらえ、ノードのDOMツリーとしてメモリ上に展開します。このDOMツリーは、C#のLINQ to XMLを用いることにより、容易に作成できます。

DOMの基本的な概念と機能

DOMは、展開されたDOMツリー上のノードを、すべて「オブジェクト」としてモデル化します。
DOMツリーのルートは、Documentオブジェクトで、XMLデータ全体を表します。Elementオブジェクトは要素を表し、Textオブジェクトは要素の内容のテキストを表します。ElementオブジェクトやTextオブジェクトは、それぞれ属性を持っており、その中にオブジェクトについての情報が入っています。Elementオブジェクトには他にも、親子や兄弟関係を示す属性があります。
DOMツリー全体の構造モデルは次のようになります。
DOMツリー全体の構造モデル

基本インターフェイス
オブジェクト 説明
Document XMLデータ全体を表すオブジェクト
Node XMLデータを構成するすべてのDOMオブジェクトの基礎となるオブジェクト
Element 要素を表すオブジェクト
NodeList 順序付けされたノードのコレクション
Attr 属性を表すオブジェクト(Elementノードの子ではない)
Text テキストを表すオブジェクト
Comment XMLデータ中のコメントを表すオブジェクト
要素
XML文書において、もっとも基本となる情報単位が要素である。要素には、内容を持つ通常の要素と、内容を持たない空要素がある。
属性
XML文書の中で、要素に対して付加的な情報を付け加えるために使用される。付加される情報は名前と値のペアで表現され、開始タグまたは空要素タグの中に記述されます。

C#のLINQ to XMLによるXML データの構成要素の作成

XMLデータは次のような要素で構成されます。

必要な名前空間
XElementやXAttributeなどのLINQ to XMLの要素を使用するには、C#の場合は using System.Xml.Linqが必要です。
XmlDocumentの作成と定義の設定
XmlDocumentを作成するには、XDocumentクラスを使用します。XMLドキュメントの定義部部分は XDeclaretionクラスで作成します。引数には、バージョン、文字コード、スタンドアローンステータス(trueまたはfalse)を指定します。
要素の作成
要素は、XElementクラスを使用します。入れ子の要素を作成する場合は、XElementクラスのコンストラクタの第2引数以下に、さらにXElementを指定します。下記の例では、Employee要素の中に、FirstName, LastName, IDの3つの要素を指定しています。XML 要素の属性 (attribute) を指定するには、XElement のコンストラクタに XAttribute 要素を含ませるだけです。下記の例では、Employee要素の中に、Gender、 Ageの2つの属性を指定しています。
保存
作成した XDocumentはSaveメソッドで保存することができます。Saveメソッドの引数には保存先パスを指定します

C#のLINQ to XMLによるXMLデータ

C#による実際のXMLデータの作成コードを次に示す。

var xml = new XDocument(
     new XDeclaration("1.0", "utf-8", "true"),
     new XComment("LINQによるXML操作 https://tomosoft.jp/design/?p=3321 "),
     new XElement("Employees",
          new XElement("Employee",
               new XAttribute("Gender", "Male"),
               new XAttribute("Age", 20),
               new XElement("FirstName", "Yuuta"),
               new XElement("LastName", "Oyama"),
               new XElement("ID", 123)
          ),
          new XElement("Employee",
               new XAttribute("Gender", "Male"),
               new XAttribute("Age", 30),
               new XElement("FirstName", "Ichiro"),
               new XElement("LastName", "Hayashi"),
               new XElement("ID", 456)
          )
     )
);
xml.Save(@"LINQによるXML操作.xml");

この結果、次のような XML データが作成されます。

<?xml version="1.0" encoding="utf-8"?>
<!--LINQによるXML操作 https://tomosoft.jp/design/?p=3321 -->
<Employees>
  <Employee Gender="Male" Age="20">
    <FirstName>Yuuta</FirstName>
    <LastName>Oyama</LastName>
    <ID>123</ID>
  </Employee>
  <Employee Gender="Male" Age="30">
    <FirstName>Ichiro</FirstName>
    <LastName>Hayashi</LastName>
    <ID>456</ID>
  </Employee>
</Employees>