2007年12月18日

Linq to XML その1

   このエントリーをはてなブックマークに追加 Clip to Evernote
Linq to XMLについて調べてみましたので、それを備忘として残しておくことにします。
ちょこっと使った感じでは、DOMなどの既存のXMLインターフェースよりもかなり使いやすいという印象です。

LINQ to XML 目次はこちら


では、以下のXMLファイルを使ったコードを書いてみましょう。

<?xml version="1.0" encoding="utf-8"?>
<People>
<Person IsReal="true">
<Name>坂本竜馬</Name>
<Age>35</Age>
</Person>
<Person IsReal="true">
<Name>井伊直弼</Name>
<Age>44</Age>
</Person>
<Person IsReal="false">
<Name>明智小五郎</Name>
<Age>39</Age>
</Person>
<Person IsReal="true">
<Name>勝海舟</Name>
<Age>18</Age>
</Person>
<Person IsReal="true">
<Name>西郷隆盛</Name>
<Age>52</Age>
</Person>
<Person IsReal="false">
<Name>両津勘吉</Name>
<Age>40</Age>
</Person>
</People>


まずは、名前を抜き出すコードを。

XDocument xdoc = XDocument.Load("people.xml");
foreach (var xperson in xdoc.Root.Elements()) {
XElement xname = xperson.Element("Name");
Console.WriteLine(xname.Value);
}


XDocument.LoadでファイルからXMLを読み込み、XDocumentインスタンスを得ます。
xdoc.Rootで、ルートエレメント"People" を、Elements()で、Root直下の要素リストを取得し、forearchでループさせています。

ループの中では、Person要素の配下にある "Name"要素を取得し、その値を表示しています。

同じ結果を出すコードをLinqのクエリ式を使うと

XDocument xdoc = XDocument.Load("people.xml");
var query = from xperson in xdoc.Root.Elements()
select xperson.Element("Name").Value;
foreach (var p in query)
Console.WriteLine(p);


となります。

前者の拡張メソッドを使ったコードは、クエリ式と同等のコードになっていませんが、あえて別の書き方にしています。


この記事へのコメント
LINQ to XMLその2
http://blog.livedoor.jp/gushwell/archives/51306261.html
Posted by LINQ to XMLその2 at 2008年04月19日 20:11
 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/51303329