XSLT輕鬆入門第四章:XPath的文法

來源:互聯網
上載者:User

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的文法仍然在不斷髮展中。通過這些函數我們可以實現更加複雜的查詢和操作。

看到這裡,我們的入門教程就快結束了。通過走馬觀花式的快速學習,希望大家對XSLT應該有了一點基本概念:XSLT是一種轉換XML文檔的語言,它包含兩個過程:轉換和格式化。XSLT的功能比CSS強大得多,它有類似資料查詢的文法。如果您對XSLT感興趣,那麼以上的知識是遠遠不夠的,需要查詢更多的資料。阿捷在最後一章附錄為大家提供了主要的XSLT資源。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.