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 表現式から返される各アイテムに変数をバインドし、イテレーションを生成します。同じ 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>