XQuery/FLWOR 表示式
外觀
< XQuery
您有一系列專案,並且希望建立一個包含這些專案的報表。
我們將使用基本的 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 美元的書籍。請注意,我們不僅有一個,而是有兩個let語句在for迴圈之後。我們還添加了一個where子句來將結果限制在超過 50.00 美元的書籍上。結果按標題排序,結果是一個新的書籍專案序列,其中包含價格和標題。
您還可以透過在序列中的兩個數字之間放置關鍵字“to”來表示從一個數字到另一個數字的值範圍。
以下生成從 1 到 10 的值列表。
xquery version "1.0";
<list>
{for $i in (1 to 10)
return
<value>{$i}</value>
}
</list>
您可以新增“at $my-counter”以在 FLWOR 迴圈中的每個專案新增一個數字計數器
xquery version "1.0";
<items>
{
let $items := ("apples","pears","oranges")
for $item at $count in $items
return
<item id="{$count}">
{$item}
</item>
}
</items>
在指令式程式設計語言(JavaScript、Java、.Net、Perl、PHP 和 Python)中,每個迴圈都是按順序執行的,一個接一個。但是 XQuery 是一種函數語言程式設計語言。在 FLWOR 迴圈中,每次迭代都可以在並行執行,並且執行緒之間不允許通訊。因此,您不能像在命令式語言中那樣遞增變數。