隨筆-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
          很基礎,實際使用這些遠遠不夠  回復  更多評論
            
          主站蜘蛛池模板: 杭锦后旗| 青州市| 增城市| 阿巴嘎旗| 枣强县| 仪陇县| 鱼台县| 都江堰市| 太仆寺旗| 瑞昌市| 北宁市| 集贤县| 安吉县| 罗山县| 清徐县| 潼南县| 微山县| 台东县| 惠州市| 望奎县| 巫山县| 霸州市| 贵德县| 临江市| 阆中市| 刚察县| 龙泉市| 宜昌市| 广元市| 通海县| 波密县| 耿马| 黄骅市| 彩票| 辽源市| 南投县| 六盘水市| 纳雍县| 海盐县| 绥芬河市| 庆阳市|