隨筆-7  評論-15  文章-0  trackbacks-0
           

          一些基本的語法規則:

          ·         XQuery對大小寫敏感

          ·         XQuery的元素、屬性以及變量必須是合法的XML名稱。

          ·         XQuery字符串值可使用單引號或雙引號。

          ·         XQuery變量由“$”并跟隨一個名稱來進行定義,舉例,$bookstore

          ·         XQuery注釋被(:和:)分割,舉例,(: XQuery 注釋 :)

          XQuery 條件表達式

          "If-Then-Else"可以在XQuery中使用。

          請看下面的例子:

          for $x in doc("books.xml")/bookstore/book

          return if ($x/@category="CHILDREN")

           then <child>{data($x/title)}</child>

           else <adult>{data($x/title)}</adult>

          請注意"If-Then-Else"的語法:if表達式后的圓括號是必需的。else也是必需的,不過僅僅寫“else ()”也是可以的。

          上面的例子的結果:

          <adult>Everyday Italian</adult>

          <child>Harry Potter</child>

          <adult>Learning XML</adult>

          <adult>XQuery Kick Start</adult>


           

          XQuery 比較

          XQuery中,有兩種方法來比較值。
           

          1.  通用比較:=, !=, <, <=, >, >=

           

          2. 值的比較:eq、ne、lt、le、gt、ge

           

          請看下面的XQuery表達式:

          $bookstore//book/@q > 10

          如果q屬性的值大于10,上面的表達式的返回值為true。

          $bookstore//book/@q gt 10

          如果僅返回一個q,且它的值大于10,那么表達式返回true。如果不止一個q被返回,則會發生錯誤。

           

          向結果添加元素和屬性

          正如在前面一節看到的,我們可以在結果中引用輸入文件中的元素和屬性:

          for $x in doc("books.xml")/bookstore/book/title

          order by $x

          return $x

          上面的XQuery表達式會在結果中引用title元素和lang屬性,就像這樣:

          <title lang="en">Everyday Italian</title>

          <title lang="en">Harry Potter</title>

          <title lang="en">Learning XML</title>

          <title lang="en">XQuery Kick Start</title>

          以上XQuery表達式返回title元素的方式和它們在輸入文檔中被描述的方式的相同的。

          現在我們要向結果添加我們自己的元素和屬性!

          添加HTML元素和文本

          現在,我們要向結果添加HTML元素。我們會把結果放在一個HTML列表中 - Now, we want to add some HTML elements to the result. We will put the result in an HTML list - together with some text:

          <html>

          <body>

          <h1>Bookstore</h1>

          <ul>

          {

          for $x in doc("books.xml")/bookstore/book

          order by $x/title

          return <li>{data($x/title)}. Category: {data($x/@category)}</li>>

          }

          </ul>

          </body>

          </html

          以上XQuery表達式會生成下面的結果:    

          <html>

          <body>

          <h1>Bookstore</h1>

          <ul>

          <li>Everyday Italian. Category: COOKING</li>

          <li>Harry Potter. Category: CHILDREN</li>

          <li>Learning XML. Category: WEB</li>

          <li>XQuery Kick Start. Category: WEB</li>

          </ul>

          </body>

          </html>

           

          選擇和過濾元素

          正如在前面的章節看到的,我們使用路徑表達式或FLWOR表達式來選去和過濾元素。

          請看下面的FLWOR表達式:

          for $x in doc("books.xml")/bookstore/book

          where $x/price>30

          order by $x/title

          return $x/title

          for

          (可選) 向每個由in表達式返回的項目捆綁一個變量

          let

          (可選)

          where

          (可選) 設定一個條件

          order by

          (可選) 設定結果的排列順序

          return

          規定在結果中返回的內容

          for 語句

          for語句可將變量捆綁到由in表達式返回的每個項目。for可產生迭代。在同一個FLWOR表達式中可存在多重for語句。

          如需在一個for語句中循環指定的次數,您可使用關鍵詞to:     

          for $x in (1 to 5)

          return <test>{$x}</test>

          結果:

          <test>1</test>

          <test>2</test>

          <test>3</test>

          <test>4</test>

          <test>5</test>

          關鍵詞at可被用來計算迭代:

          for $x at $i in doc("books.xml")/bookstore/book/title

          return <book>{$i}. {data($x)}</book>

          結果:

          <book>1. Everyday Italian</book>

          <book>2. Harry Potter</book>

          <book>3. XQuery Kick Start</book>

          <book>4. Learning XML</book>

          在for語句中同樣允許多個in表達式。請使用逗號來分割每一個in表達式:

          for $x in (10,20), $y in (100,200)

          return <test>x={$x} and y={$y}</test>

          結果:

          <test>x=10 and y=100</test>

          <test>x=10 and y=200</test>

          <test>x=20 and y=100</test>

          <test>x=20 and y=200</test>

           

          let 語句

          let語句可完成變量分配,并可避免多次重復相同的表達式。let語句不回導致迭代。

          let $x := (1 to 5)

          return <test>{$x}</test>   

          結果   

          <test>1 2 3 4 5</test>   

          where 語句

          where語句用于為結果設定一個或多個條件(criteria)。

          where $x/price>30 and $x/price<100

          order by 語句

          order by語句用于規定結果的排序次序。此處,我們要根據category和title來對結果進行排序:

          for $x in doc("books.xml")/bookstore/book

          order by $x/@category, $x/title

          return $x/title

          結果:

          <title lang="en">Harry Potter</title>

          <title lang="en">Everyday Italian</title>

          <title lang="en">Learning XML</title>

          <title lang="en">XQuery Kick Start</title>

          return 語句:

              

          return語句規定要返回的內容。

          for $x in doc("books.xml")/bookstore/book

          return $x/title

          結果:

          <title lang="en">Everyday Italian</title>

          <title lang="en">Harry Potter</title>

          <title lang="en">XQuery Kick Start</title>

          <title lang="en">Learning XML</title>

          posted on 2009-10-07 17:46 腳踏實地 閱讀(1618) 評論(1)  編輯  收藏 所屬分類: start XQuery

          評論:
          # re: xquery語法學習(二)[未登錄] 2011-08-14 12:09 | Jim
          很基礎,實際使用這些遠遠不夠  回復  更多評論
            
          主站蜘蛛池模板: 吉木萨尔县| 老河口市| 广饶县| 惠安县| 永济市| 龙胜| 伊金霍洛旗| 扶风县| 哈巴河县| 英吉沙县| 资阳市| 蒙城县| 兴城市| 离岛区| 田阳县| 宽甸| 龙陵县| 莱阳市| 江川县| 全州县| 潞城市| 济源市| 西和县| 合肥市| 临澧县| 西吉县| 西盟| 扶绥县| 岳普湖县| 马鞍山市| 奉化市| 镇江市| 邯郸市| 额尔古纳市| 西华县| 安阳市| 小金县| 余姚市| 尼木县| 潞西市| 双峰县|