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來表示從一個數字到另一個數字的一系列值。

以下內容生成110之間的值列表。


<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>