|  |  | 
 
| 連載:[完全版]究極のC#プログラミングChapter18 LINQ to XML川俣 晶2010/05/06
 |  | 
| 
 | 
18.6 単純化されたXML文書生成
 LINQ to XMLの恩恵は、何もクエリだけで発揮されるわけではない。上記リスト18.6のサンプルコードは、単にXML文書を生成するだけのプログラムだが、DOMを使って正攻法でXML文書を構築する方法と比較して、大幅なソースコードの簡素化が図られている。
 実際に次のリスト18.7と比較すると、いかに改善されているかがわかるだろう。
| 
 
| using System;using System.Xml;
 
 class Program
 {
 static void Main(string[] args)
 {
 string ns = "http://www.piedey.co.jp/example/linqtoxml200811";
 
 var doc = new XmlDocument();
 var person = doc.CreateElement("person",ns);
 doc.AppendChild( person );
 
 var name = doc.CreateElement("name",ns);
 name.InnerText = "Wong Fei Fong";
 person.AppendChild( name );
 
 var age = doc.CreateElement("age",ns);
 age.InnerText = "18";
 person.AppendChild( age );
 
 var address = doc.CreateElement("address",ns);
 address.InnerText = "Village of Lahan";
 person.AppendChild( address );
 
 Console.WriteLine(doc.OuterXml);
 }
 }
 
 |  | 
| リスト18.7 DOMにより正攻法で記述した例 | 
| 
 
| <person xmlns="http://www.piedey.co.jp/example/linqtoxml200811"><name>Wong FeiFong</name><age>18</age><address>Village of Lahan</address></person>
 |  | 
| リスト18.7の実行結果 | 
 これを見て、嫌になった読者もいると思うし、自分ならこのようなコードは書かないと思った読者もいると思う。もちろん、筆者も通常の開発であればこのようなコードは書かない。
 ちなみに、どのような仕掛けで簡潔なXML文書の生成ができるのか、構造を簡単に紹介しておこう。
 XElementクラスのコンストラクタはいくつかのバリエーションがあるが、person要素生成で使用しているもの(リスト18.6の「new XElement(ex + "person",……」の部分)は任意の数の引数を受け取ることができる。最初の引数は名前だが2番目以降は、属性(XAttribute)、要素(XElement)、テキスト(string)をいくつでも並べることができ、それらが順に子ノードとして生成される。
 これにより、コンストラクタの引数に列挙するだけで、必要な子ノードをすべてまとめて生成することができる。もちろん、それらの子ノードのコンストラクタも同じように子ノードを列挙できるので、たった1回ネストした形でコンストラクタ実行式を書けば、それだけで任意のXML文書を生成させることができる。
 このような工夫のおかげで、C# 3.0はECMAScriptやVisual Basicと異なり、XML専用の構文を導入していないにもかかわらず、従来とは比較にならないほど簡潔にXML文書を処理するコードを記述できる。
 
 
 
	
		Insider.NET 記事ランキング
		
		
			本日
			月間