假設有一系列專案,並且需要建立包含這些資料專案的報告。
我們將使用基本的XQuery FLWOR表示式來疊代序列中的每個資料專案。 FLWOR表示式的五個部分是:
假設有一個樣本檔案,它的內容如下所示:
<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>