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 表現式から返される各アイテムに変数をバインドし、イテレーションを生成します。同じ 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. Everyday Italian</book>
<book>2. Harry Potter</book>
<book>3. XQuery Kick Start</book>
<book>4. Learning XML</book>

在 for 文件中同样允许多个 in 表达式。请使用逗号来分割每一个 in 表达式:

for $x in (10,20), $y in (100,200)
return <test>x={$x} and y={$y}</test>

結果:

<test>x=10 and y=100</test>
<test>x=10 and y=200</test>
<test>x=20 and y=100</test>
<test>x=20 and y=200</test>

let 文件

let 文件可以完成变量分配,并且可以避免多次重复相同的表达式。let 文件不会导致迭代。

let $x := (1 to 5)
return <test>{$x}</test>

結果:

<test>1 2 3 4 5</test>

where 文件

where 文件用于为结果设定一个或多个条件(criteria)。

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>