隨筆-7  評(píng)論-15  文章-0  trackbacks-0
           

          一些基本的語(yǔ)法規(guī)則:

          ·         XQuery對(duì)大小寫(xiě)敏感

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

          ·         XQuery字符串值可使用單引號(hào)或雙引號(hào)。

          ·         XQuery變量由“$”并跟隨一個(gè)名稱來(lái)進(jìn)行定義,舉例,$bookstore

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

          XQuery 條件表達(dá)式

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

          請(qǐng)看下面的例子:

          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>

          請(qǐng)注意"If-Then-Else"的語(yǔ)法:if表達(dá)式后的圓括號(hào)是必需的。else也是必需的,不過(guò)僅僅寫(xiě)“else ()”也是可以的。

          上面的例子的結(jié)果:

          <adult>Everyday Italian</adult>

          <child>Harry Potter</child>

          <adult>Learning XML</adult>

          <adult>XQuery Kick Start</adult>


           

          XQuery 比較

          XQuery中,有兩種方法來(lái)比較值。
           

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

           

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

           

          請(qǐng)看下面的XQuery表達(dá)式:

          $bookstore//book/@q > 10

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

          $bookstore//book/@q gt 10

          如果僅返回一個(gè)q,且它的值大于10,那么表達(dá)式返回true。如果不止一個(gè)q被返回,則會(huì)發(fā)生錯(cuò)誤。

           

          向結(jié)果添加元素和屬性

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

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

          order by $x

          return $x

          上面的XQuery表達(dá)式會(huì)在結(jié)果中引用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表達(dá)式返回title元素的方式和它們?cè)谳斎胛臋n中被描述的方式的相同的。

          現(xiàn)在我們要向結(jié)果添加我們自己的元素和屬性!

          添加HTML元素和文本

          現(xiàn)在,我們要向結(jié)果添加HTML元素。我們會(huì)把結(jié)果放在一個(gè)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表達(dá)式會(huì)生成下面的結(jié)果:    

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

           

          選擇和過(guò)濾元素

          正如在前面的章節(jié)看到的,我們使用路徑表達(dá)式或FLWOR表達(dá)式來(lái)選去和過(guò)濾元素。

          請(qǐng)看下面的FLWOR表達(dá)式:

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

          where $x/price>30

          order by $x/title

          return $x/title

          for

          (可選) 向每個(gè)由in表達(dá)式返回的項(xiàng)目捆綁一個(gè)變量

          let

          (可選)

          where

          (可選) 設(shè)定一個(gè)條件

          order by

          (可選) 設(shè)定結(jié)果的排列順序

          return

          規(guī)定在結(jié)果中返回的內(nèi)容

          for 語(yǔ)句

          for語(yǔ)句可將變量捆綁到由in表達(dá)式返回的每個(gè)項(xiàng)目。for可產(chǎn)生迭代。在同一個(gè)FLWOR表達(dá)式中可存在多重for語(yǔ)句。

          如需在一個(gè)for語(yǔ)句中循環(huán)指定的次數(shù),您可使用關(guān)鍵詞to:     

          for $x in (1 to 5)

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

          結(jié)果:

          <test>1</test>

          <test>2</test>

          <test>3</test>

          <test>4</test>

          <test>5</test>

          關(guān)鍵詞at可被用來(lái)計(jì)算迭代:

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

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

          結(jié)果:

          <book>1. Everyday Italian</book>

          <book>2. Harry Potter</book>

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

          <book>4. Learning XML</book>

          在for語(yǔ)句中同樣允許多個(gè)in表達(dá)式。請(qǐng)使用逗號(hào)來(lái)分割每一個(gè)in表達(dá)式:

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

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

          結(jié)果:

          <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 語(yǔ)句

          let語(yǔ)句可完成變量分配,并可避免多次重復(fù)相同的表達(dá)式。let語(yǔ)句不回導(dǎo)致迭代。

          let $x := (1 to 5)

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

          結(jié)果   

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

          where 語(yǔ)句

          where語(yǔ)句用于為結(jié)果設(shè)定一個(gè)或多個(gè)條件(criteria)。

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

          order by 語(yǔ)句

          order by語(yǔ)句用于規(guī)定結(jié)果的排序次序。此處,我們要根據(jù)category和title來(lái)對(duì)結(jié)果進(jìn)行排序:

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

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

          return $x/title

          結(jié)果:

          <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 語(yǔ)句:

              

          return語(yǔ)句規(guī)定要返回的內(nèi)容。

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

          return $x/title

          結(jié)果:

          <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 腳踏實(shí)地 閱讀(1625) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): start XQuery

          評(píng)論:
          # re: xquery語(yǔ)法學(xué)習(xí)(二)[未登錄](méi) 2011-08-14 12:09 | Jim
          很基礎(chǔ),實(shí)際使用這些遠(yuǎn)遠(yuǎn)不夠  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 绥芬河市| 西平县| 独山县| 麻城市| 宁安市| 晴隆县| 郑州市| 安塞县| 英超| 米易县| 镇原县| 屯门区| 天祝| 石城县| 磐石市| 扎鲁特旗| 清丰县| 聊城市| 洛阳市| 东海县| 灯塔市| 土默特右旗| 始兴县| 衡南县| 龙门县| 鄂伦春自治旗| 葫芦岛市| 同心县| 顺昌县| 宕昌县| 柘城县| 丹阳市| 邛崃市| 西青区| 于都县| 茶陵县| 广汉市| 和静县| 长子县| 堆龙德庆县| 杨浦区|