XQuery の選択とフィルタリング
XMLインスタンスドキュメント
以下の例では、この「books.xml」ドキュメント(前の章で使用されたXMLファイルと同じ)を使用し続けます。
要素の選択およびフィルタリング
前の章で見たように、私たちはパス表現や FLWOR 表現を使用して要素を選択およびフィルタリングします。
以下の FLWOR 表現式をご覧ください:
for $x in doc("books.xml")/bookstore/book where $x/price>30 order by $x/title return $x/title
- for
- (オプション)in 表現式から返される各項目に変数をバインドします
- let
- (オプション)
- where
- (オプション)条件を設定します
- order by
- (オプション)結果の並び順を設定します
- return
- 結果に戻す内容を指定します
for 文
for 文は変数を in 表現式から返される各項目にバインドします。for 文は反復を生成します。同じ FLWOR 表現式内に複数の for 文が存在できます。
for 文で指定した回数の反復を行うには、以下を使用します:キーワード to :
for $x in (1 to 5) return <test>{$x}</test>
結果:
<test>1</test> <test>2</test> <test>3</test> <test>4</test> <test>5</test>
キーワード at 反復計算に使用できます:
for $x at $i in doc("books.xml")/bookstore/book/title return <book>{$i}. {data($x)}</book>
結果:
<book>1. 毎日のイタリア料理</book> <book>2. ハリ・ポッター</book> <book>3. XQuery キックスタート</book> <book>4. XML 学習</book>
for 文でも同じです複数の in 表現式が可能です。各 in 表現式をカンマで区切ってください:
for $x in (10,20), $y in (100,200) return <test>x={{$x}} か y={{$y}}</test>
結果:
<test>x=10 か y=100</test> <test>x=10 か y=200</test> <test>x=20 か y=100</test> <test>x=20 か y=200</test>
let 文言
let 文は変数の割り当てを完了し、同じ表达式を複数回繰り返すのを避けることができます。let 文はループを引き起こしません。
let $x := (1 to 5) return <test>{$x}</test>
結果:
<test>1 2 3 4 5</test>
where 文
where 文は結果に一つまたは複数の条件(基準)を設定します。
where $x/price>30 and $x/price<100
order by 文
order by 文は結果のソート順を指定します。ここでは、category と title に基づいて結果をソートする必要があります:
for $x in doc("books.xml")/bookstore/book order by $x/@category, $x/title return $x/title
結果:
<title lang="en">Harry Potter</title> <title lang="en">Everyday Italian</title> <title lang="en">Learning XML</title> <title lang="en">XQuery Kick Start</title>
return 文:
return 文は返す内容を指定します。
for $x in doc("books.xml")/bookstore/book return $x/title
結果:
<title lang="en">Everyday Italian</title> <title lang="en">Harry Potter</title> <title lang="en">XQuery Kick Start</title> <title lang="en">Learning XML</title>