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>