<?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>
コレに対して、key の値が 20 台のものを LINQ で取得してみましょう。
XDocument doc = XDocument.Load(@"D:\temp\test.xml");
XElement documentElement = (XElement)doc.FirstNode;
IEnumerable<XElement> elements =
from item in documentElement.Elements("item")
let keyValue = int.Parse(item.Attribute("key").Value)
where (20 < keyValue) && (keyValue < 30)
select item;
同じことを XQuery でやってみます。
<hoge>
{
FOR $item IN document("test.xml")//item
LET $key := $item/@key
WHERE $key > 20 AND $key < 30
RETURN $item
}
</hoge>
そっくりだと思いません?
for と from、return と select が異なりますが、かなり似てます。
これはうれしいですね。
from より for のほうがよかったなぁ。from in ってなんか違和感があるわぁ
# XQuery については、そのうち(XML Schema が終わったらかな)この blog でも書いていくつもりです