XQuery の選択とフィルタリング

XMLインスタンスドキュメント

以下の例では、この「books.xml」ドキュメント(前の章で使用されたXMLファイルと同じ)を使用し続けます。

ブラウザで "books.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>