Orcas やってきましたね、Orcas。
まず MSDN 見てるとと~~~~~~~~っても気になる名前空間がありました。
System.Xml.Linq
XML での LINQ 用の名前空間みたいですね。
というわけで、さっそく XML での LINQ を試してみました。
<?xml version="1.0" encoding="UTF-8"?>
<root>
<item key="11">1-1</item>
<item key="12">1-2</item>
<item key="13">1-3</item>
<item key="21">2-1</item>
<item key="22">2-2</item>
<item key="23">2-3</item>
<item key="31">3-1</item>
<item key="32">3-2</item>
<item key="33">3-3</item>
</root>
こんな XML に対して、key 属性が 1 で終わる要素を取り出すにはこんな感じ。
XName key = "key";
XDocument doc = XDocument.Load(@"D:\temp\test.xml");
XElement documentElement = (XElement)doc.FirstNode;
IEnumerable<XElement> elements =
from child in documentElement.Elements("item")
where item.Attribute(key).Value.EndsWith("1")
select item;
foreach (XElement elm in elements) {
Console.WriteLine(elm);
}
Elements っつーどうみてもプロパティとしか思えない名前のメソッドがありまして、これが引数に XName というクラスのインスタンスを引数にとります。
この XName はコンストラクタが定義されてなくて、どうやってインスタンスを作るのかに非常に迷いました。
なんのことはない string でいいんですよ。
実際にサンプルでは Attribute メソッドにおける XName インスタンスは XName = "key" としてるでしょ。
ほかにも色々楽しめるので XML における LINQ のさわり部分を短期集中連載してみます。(XML Schema どーなった!!??)