XQuery序列範例


序列中的每個資料專案可能彼此非常相似,或者它們可能是不同的型別。

我們從一些簡單的序列範例開始。看一下最常見的序列運算子。 XQuery使用單詞sequence作為有序容器容器的通用名稱。

了解序列在XQuery中的工作方式對於理解語言的工作原理至關重要。 通用專案序列的使用是函式式程式設計的核心,與其他程式設計語言(如Java或JavaScript)形成鮮明對比,後者提供了多種方法和函式來處理鍵值對,字典,陣列和XML資料。 XQuery的精彩之處在於,您只需要學習一組概念和一小部分函式來學習如何快速運算元據。

建立字元和字串序列
可以使用括號來包含序列,使用逗號分隔資料專案和引號以包含字串值:

 let $sequence := ('a', 'b', 'c', 'd', 'e', 'f')

請注意,可以使用單引號或雙引號,但對於大多數位符串,使用單引號。

let $sequence := ("apple", 'banana', "carrot", 'dog', "egg", 'fig')

還可以混合資料型別。 例如,以下序列在同一序列中具有三個字串和三個整數。

let $sequence := ('a', 'b', 'c', 1, 2, 3)

然後,可以將序列傳遞給任何適用於序列的XQuery函式。 例如,count()函式將序列作為輸入,並返回序列中的資料項數量。

let $count := count($sequence)

檢視序列中的資料項

let $sequence := ('a', 'b', 'c', 'd', 'e', 'f')
let $count := count($sequence)
return
   <results>
      <count>{$count}</count>
      <items>
       {for $item in $sequence
        return
          <item>{$item}</item>
        }
      </items>
   </results>

執行結果如下所示 -

<results>
      <count>6</count>
      <items>
         <item>a</item>
         <item>b</item>
         <item>c</item>
         <item>d</item>
         <item>e</item>
         <item>f</item>
      </items>
   </results>

檢視序列中的選定資料專案

可以使用謂詞表示式選擇序列中的資料專案。可以按位元置選擇專案(從1開始):

let $sequence := ('a', 'b', 'c', 'd', 'e', 'f')
return
   <items>{
      for $item in $sequence[1, 3, 4]
      return
           <item>{$item}</item>
      }
   </items>

結果如下所示 -

<items>
    <item>a</item>
    <item>c</item>
    <item>d</item>
</items>

或按值:

let $sequence := ('a', 'b', 'c', 'd', 'e', 'f')
return
    <items>{
       for $item in $sequence[. = ('a','e')]
       return
          <item>{$item}</item>
       }
    </items>

結果如下所示 -

<items>
    <item>a</item>
    <item>e</item>
</items>

將XML元素新增到序列中

還可以按順序儲存XML元素。

let $sequence := ('apple', <banana/>, <fruit type="carrot"/>, <animal type='dog'/>, <vehicle>car</vehicle>)

雖然可以使用括號來建立一系列XML項,但最佳實踐是使用XML標記來開始和結束序列並將所有項儲存為XML元素。建議使用專案作為元素名稱來儲存資料專案的通用序列。

下面是一個例子:

let $items := 
   <items>
      <banana/>
      <fruit type="carrot"/>
      <animal type='dog'/>
      <vehicle>car</vehicle>
   </items>

另一個約定是將所有單個專案放在它們自己的item元素標記中,並在專案列表變長時將每個專案放在單獨的行上。

let $items := 
   <items>
      <item>banana</item>
      <item>
         <fruit type="carrot"/>
      </item>
      <item>
         <animal type='dog'/>
      </item>
      <item>
         <vehicle>car</vehicle>
      </item>
   </items>

然後可以使用以下FLWOR表示式來顯示以下每個資料專案:

let $sequence :=
    <items>
       <item>banana</item>
       <item>
          <fruit type="carrot"/>
       </item>
       <item>
          <animal type='dog'/>
       </item>
       <item>
          <vehicle>car</vehicle>
       </item>
    </items>


return
   <results>{
      for $item in $sequence/item
      return
         <item>{$item}</item>
   }</results>

它將返回以下XML內容 -

<results>
    <item>
        <item>banana</item>
    </item>
    <item>
        <item>
            <fruit type="carrot"/>
        </item>
    </item>
    <item>
        <item>
            <animal type="dog"/>
        </item>
    </item>
    <item>
        <item>
            <vehicle>car</vehicle>
        </item>
    </item>
</results>