XPath的語法

 4.XPath的語法
  
  我們在前面已經提到過,XPath是用來幫助XSLT在XML源文檔中查找定位信息的語言。在實際使用過程中,XPath和XSLT總是混在一起使用,在上面一章的語法例子中我們已經有使用到XPath的語法,只是沒有明確點出。但W3C將它們分成兩個標準,所以我們也將它們拆成兩章來講解。
  
  
  4.XPath的語法
  
  
  4.1 當前位置
  
  
  4.2 尋址操作
  
  
  4.3 運算符
  
  
  4.4 功能函數
  
  4.1 當前位置
  
  
  當我們使用XSLT處理XML源文檔是,我們用Context來表示當前正在被模板處理的節點位置。比如xsl:template match="/"語句中表示Context在文檔的根(root)節點。我不知道如何準確的翻譯Context這個詞,它類似於C語言裏的指針,表示程序當前運行的位置。理解Context對於正確處理XSL模板非常重要,當您的XSL模板輸出的文檔和您想要的不一樣,最先應該分析的就是Context在哪裏。
  Location Paths是用於設定你想要尋找的Context節點位置。就類似DOS的目錄命令。我們看個例子
  
  <xsl:for-each select="child::PEOPLE/descendant::PERSON">
  
  其中child::PEOPLE/descendant::PERSON就是XPath語法,這個表達式就是一個Location Paths,代碼說明要顯示所有PEOPLE元素的子元素和所有PERSON元素的子元素。通常我們會採用更簡單的寫法:
  
  <xsl:for-each select="PEOPLE//PERSON">
  
  我們來解釋path的兩種表示方法:"/"和"//"。
  "/"是表示當前文檔的節點,類似DOS目錄分割符。例如:/PEOPLE表示選擇根節點下的PEOPLE元素;PEOPLE/PERSON表示選擇PEOPLE元素下所有的PESON子元素。
  "//"則表示當前文檔所有的節點。類似查看整個目錄。例如://PEOPLE表示選擇文檔中所有的PEOPLE元素,無論它在什麼層次;PEOPLE//PERSON表示在PEOPLE元素下所有的PERSON元素,無論它的層次多深。
  
  4.2 尋址操作
  
  Axis和Predicate是XPath語法中對Location Paths進行定位操作的語法,具體的用法列表如下
  
  Axis語法表
  --------------------------------------------------------
  表達式 簡寫 說明
  --------------------------------------------------------
  self . 選擇當前的節點.。
  例子 :
  <TD><xsl:value-of select="."/></TD>
  代碼表示在當前位置插入當前的節點包含的文本(text)值,
  --------------------------------------------------------
  parent .. 選擇當前節點的父節點。
  --------------------------------------------------------
  attribute @ 選擇一個元素的所有屬性。
  例子:
  <TD><xsl:value-of select="@PERSONID"/></TD>
  選擇PERSON元素的所有屬性.
  --------------------------------------------------------
  child 選擇當前節點的所有子元素。
  --------------------------------------------------------
  ancestor 選擇當前節點的所有父元素(包括父元素的父元素,類推)
  --------------------------------------------------------
  
  Axis幫助我們選擇當前節點周圍所有的節點,而Predicate則用來定位當前節點內部的元素。表示方法爲方括號[]中加表達式:[ Expression ]。具體舉例如下:
  
  PERSON[position()=2]
  這句代碼表示尋找第二個"PERSON" 元素
  
  PERSON[starts-with(name, "B")]
  這句代碼表示尋找所有名稱以"B"開頭的PERSON元素。
  
  4.3 運算符
  
  這一節介紹XPath的運算符(Expressions),列表如下:
  --------------------------------------------------------
  運算符 說明
  --------------------------------------------------------
  and, or 就是普通意義的and, or
  --------------------------------------------------------
  = 等於
  --------------------------------------------------------
  != 不等於
  --------------------------------------------------------
  >, >= 大於,大於等於
  --------------------------------------------------------
  <, <= 小於,小於等於。注意:在XSL文件中,<符號要用< 表示
  --------------------------------------------------------
  +, -, *, div 加減乘除
  --------------------------------------------------------
  mod 取模
  --------------------------------------------------------
  | 兩個節點一起計算
  --------------------------------------------------------
  
  
  4.4 功能函數(Functions)
  
  
  在XPath裏有很多功能函數可以幫助我們精確尋找需要的節點。
  
  count()功能
  作用:統計計數,返回符合條件的節點的個數。
  舉例:<p><xsl:value-of select="count(PERSON[name=tom])"/></p>
  說明:代碼的用途是顯示PERSON元素中姓名屬性值爲tom有幾個。
  
  number()功能
  作用:將屬性的值中的文本轉換爲數值。
  舉例:<p>The number is: <xsl:value-of select="number(book/price)"/></p>
  說明:代碼的用途是顯示書的價格。
  
  substring() 功能
  語法:substring(value, start, length)
  作用:截取字符串。
  舉例:<p><xsl:value-of select="substring(name, 1, 3)"/></p>
  說明:代碼的用途是截取name元素的值,從第一個字母開始顯示到第三個。
  
  sum()功能
  作用:求和。
  舉例:<p>Total Price = <xsl:value-of select="sum(//price)"/></p>
  說明:代碼的用途是計算所有價格的和。
  
  上面這些功能只是XPath語法中的一部分,還有大量的功能函數沒有介紹,而且目前XPath的語法仍然在不斷發展中。通過這些函數我們可以實現更加複雜的查詢和操作。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章