XQuery FLWOR示例
假設有一系列項目,並且需要創建包含這些數據項目的報告。
我們將使用基本的XQuery FLWOR表達式來迭代序列中的每個數據項目。 FLWOR表達式的五個部分是:
- for - 指定要選擇的序列中的項目(可選)
- let - 用於創建返回中使用的臨時名稱(可選)
- where - 限制項目返回(可選)
- order - 更改結果的順序(可選)
- return - 指定返回數據的結構(必需)
假設有一個樣本文件,它的內容如下所示:
<books>
<book>
<title>Introduction to XQuery</title>
<description>A beginner's guide to XQuery that covers sequences and FLOWR expressions</description>
<type>softcover</type>
<sales-count>155</sales-count>
<price>19.95</price>
</book>
<book>
<title>Document Transformations with XQuery</title>
<description>How to transform complex documents like DocBook, TEI and DITA</description>
<type>hardcover</type>
<sales-count>105</sales-count>
<price>59.95</price>
</book>
<!-- ...more books here.... -->
</books>
下面是一個FLWOR表達式的簡單示例,它只返回按標題排序的書籍的標題和價格:
for $book in doc("catalog.xml")/books/book
let $title := $book/title/text()
let $price := $book/price/text()
where xs:decimal($price) gt 50.00
order by $title
return
<book>
<title>{$title}</title>
<price>{$price}</price>
</book>
此XQuery FLWOR表達式將返回價格超過50.00
的所有書籍。 請注意,在for
循環之後有兩個let
語句。還添加了where
子句,將結果限制爲價格超過50.00
的書籍。 結果按標題排序,結果是新的書籍項目序列,其中包含價格和標題。
方法2: 使用「to」函數生成一系列值
還可以通過在序列中的兩個數字之間放置關鍵字to
來表示從一個數字到另一個數字的一系列值。
以下內容生成1
到10
之間的值列表。
<list>
{for $i in (1 to 10)
return
<value>{$i}</value>
}
</list>
方法3: 使用「at」函數生成一系列值
可以添加at $ my-counter
爲FLWOR循環中的每個數據項目添加數字計數器。
<items>
{
let $items := ("apples","pears","oranges")
for $item at $count in $items
return
<item id="{$count}">
{$item}
</item>
}
</items>