|
4.XPath的語(yǔ)法
我們?cè)谇懊嬉呀?jīng)提到過(guò),XPath是用來(lái)幫助XSLT在XML源文檔中查找定位信息的語(yǔ)言。在實(shí)際使用過(guò)程中,XPath和XSLT總是混在一起使用,在上面一章的語(yǔ)法例子中我們已經(jīng)有使用到XPath的語(yǔ)法,只是沒(méi)有明確點(diǎn)出。但W3C將它們分成兩個(gè)標(biāo)準(zhǔn),所以我們也將它們拆成兩章來(lái)講解。
4.XPath的語(yǔ)法
4.1 當(dāng)前位置 4.2 尋址操作 4.3 運(yùn)算符 4.4 功能函數(shù)
4.1 當(dāng)前位置
當(dāng)我們使用XSLT處理XML源文檔是,我們用Context來(lái)表示當(dāng)前正在被模板處理的節(jié)點(diǎn)位置。比如xsl:template match="/"語(yǔ)句中表示Context在文檔的根(root)節(jié)點(diǎn)。我不知道如何準(zhǔn)確的翻譯Context這個(gè)詞,它類(lèi)似于C語(yǔ)言里的指針,表示程序當(dāng)前運(yùn)行的位置。理解Context對(duì)于正確處理XSL模板非常重要,當(dāng)您的XSL模板輸出的文檔和您想要的不一樣,最先應(yīng)該分析的就是Context在哪里。 Location Paths是用于設(shè)定你想要尋找的Context節(jié)點(diǎn)位置。就類(lèi)似DOS的目錄命令。我們看個(gè)例子
<xsl:for-each select="child::PEOPLE/descendant::PERSON">
其中child::PEOPLE/descendant::PERSON就是XPath語(yǔ)法,這個(gè)表達(dá)式就是一個(gè)Location Paths,代碼說(shuō)明要顯示所有PEOPLE元素的子元素和所有PERSON元素的子元素。通常我們會(huì)采用更簡(jiǎn)單的寫(xiě)法:
<xsl:for-each select="PEOPLE//PERSON">
我們來(lái)解釋path的兩種表示方法:"/"和"http://"。 "/"是表示當(dāng)前文檔的節(jié)點(diǎn),類(lèi)似DOS目錄分割符。例如:/PEOPLE表示選擇根節(jié)點(diǎn)下的PEOPLE元素;PEOPLE/PERSON表示選擇PEOPLE元素下所有的PESON子元素。 "http://"則表示當(dāng)前文檔所有的節(jié)點(diǎn)。類(lèi)似查看整個(gè)目錄。例如://PEOPLE表示選擇文檔中所有的PEOPLE元素,無(wú)論它在什么層次;PEOPLE//PERSON表示在PEOPLE元素下所有的PERSON元素,無(wú)論它的層次多深。
4.2 尋址操作
Axis和Predicate是XPath語(yǔ)法中對(duì)Location Paths進(jìn)行定位操作的語(yǔ)法,具體的用法列表如下
Axis語(yǔ)法表 -------------------------------------------------------- 表達(dá)式 簡(jiǎn)寫(xiě) 說(shuō)明 -------------------------------------------------------- self . 選擇當(dāng)前的節(jié)點(diǎn).。 例子 : <TD><xsl:value-of select="."/></TD> 代碼表示在當(dāng)前位置插入當(dāng)前的節(jié)點(diǎn)包含的文本(text)值, -------------------------------------------------------- parent .. 選擇當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)。 -------------------------------------------------------- attribute @ 選擇一個(gè)元素的所有屬性。 例子: <TD><xsl:value-of select="@PERSONID"/></TD> 選擇PERSON元素的所有屬性. -------------------------------------------------------- child 選擇當(dāng)前節(jié)點(diǎn)的所有子元素。 -------------------------------------------------------- ancestor 選擇當(dāng)前節(jié)點(diǎn)的所有父元素(包括父元素的父元素,類(lèi)推) --------------------------------------------------------
Axis幫助我們選擇當(dāng)前節(jié)點(diǎn)周?chē)械墓?jié)點(diǎn),而Predicate則用來(lái)定位當(dāng)前節(jié)點(diǎn)內(nèi)部的元素。表示方法為方括號(hào)[]中加表達(dá)式:[ Expression ]。具體舉例如下:
PERSON[position()=2] 這句代碼表示尋找第二個(gè)"PERSON" 元素
PERSON[starts-with(name, "B")] 這句代碼表示尋找所有名稱以"B"開(kāi)頭的PERSON元素。
4.3 運(yùn)算符
這一節(jié)介紹XPath的運(yùn)算符(Expressions),列表如下: -------------------------------------------------------- 運(yùn)算符 說(shuō)明 -------------------------------------------------------- and, or 就是普通意義的and, or -------------------------------------------------------- = 等于 -------------------------------------------------------- != 不等于 -------------------------------------------------------- >, >= 大于,大于等于 -------------------------------------------------------- <, <= 小于,小于等于。注意:在XSL文件中,<符號(hào)要用< 表示 -------------------------------------------------------- +, -, *, div 加減乘除 -------------------------------------------------------- mod 取模 -------------------------------------------------------- | 兩個(gè)節(jié)點(diǎn)一起計(jì)算 --------------------------------------------------------
4.4 功能函數(shù)(Functions)
在XPath里有很多功能函數(shù)可以幫助我們精確尋找需要的節(jié)點(diǎn)。
count()功能 作用:統(tǒng)計(jì)計(jì)數(shù),返回符合條件的節(jié)點(diǎn)的個(gè)數(shù)。 舉例:<p><xsl:value-of select="count(PERSON[name=tom])"/></p> 說(shuō)明:代碼的用途是顯示PERSON元素中姓名屬性值為tom有幾個(gè)。
number()功能 作用:將屬性的值中的文本轉(zhuǎn)換為數(shù)值。 舉例:<p>The number is: <xsl:value-of select="number(book/price)"/></p> 說(shuō)明:代碼的用途是顯示書(shū)的價(jià)格。
substring() 功能 語(yǔ)法:substring(value, start, length) 作用:截取字符串。 舉例:<p><xsl:value-of select="substring(name, 1, 3)"/></p> 說(shuō)明:代碼的用途是截取name元素的值,從第一個(gè)字母開(kāi)始顯示到第三個(gè)。
sum()功能 作用:求和。 舉例:<p>Total Price = <xsl:value-of select="sum(//price)"/></p> 說(shuō)明:代碼的用途是計(jì)算所有價(jià)格的和。
上面這些功能只是XPath語(yǔ)法中的一部分,還有大量的功能函數(shù)沒(méi)有介紹,而且目前XPath的語(yǔ)法仍然在不斷發(fā)展中。通過(guò)這些函數(shù)我們可以實(shí)現(xiàn)更加復(fù)雜的查詢和操作。
看到這里,我們的入門(mén)教程就快結(jié)束了。通過(guò)走馬觀花式的快速學(xué)習(xí),希望大家對(duì)XSLT應(yīng)該有了一點(diǎn)基本概念:XSLT是一種轉(zhuǎn)換XML文檔的語(yǔ)言,它包含兩個(gè)過(guò)程:轉(zhuǎn)換和格式化。XSLT的功能比CSS強(qiáng)大得多,它有類(lèi)似數(shù)據(jù)查詢的語(yǔ)法。如果您對(duì)XSLT感興趣,那么以上的知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,需要查詢更多的資料。阿捷在最后一章附錄為大家提供了主要的XSLT資源。
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!