1.XSLT的概念
1.1 什么是XSLT
1.2 為什么要用XSLT
1.3 XSLT的歷史
1.4 什么是XPath
1.5 XSLT和CSS的比較
1.6 XSLT和IE5
1.XSLT的概念
我們首先來(lái)澄清一個(gè)概念,大家可能聽(tīng)說(shuō)過(guò)XSL(eXtensible Stylesheet Language),XSL和我們這里說(shuō)的XSLT從狹義上理解是一樣的,而按照W3C的標準,XSLT的說(shuō)法更嚴格些,因此我們在文章中統一使用XSLT的稱(chēng)法。它們之間具體的關(guān)系我們會(huì )在下面講述。
1.1 什么是XSLT
XSLT的英文標準名稱(chēng)為eXtensible Stylesheet Language Transformation。根據W3C的規范說(shuō)明書(shū)(http://www.w3.org/TR/xslt),最早設計XSLT的用意是幫助XML文檔(document)轉換為其它文檔。但是隨著(zhù)發(fā)展,XSLT已不僅僅用于將XML轉換為HTML或其它文本格式,更全面的定義應該是:
XSLT是一種用來(lái)轉換XML文檔結構的語(yǔ)言。
1.2 為什么要用XSLT
我們已經(jīng)知道,XML是一種電腦程序間交換原始數據的簡(jiǎn)單而標準的方法。它的成功并不在于它容易被人們書(shū)寫(xiě)和閱讀,更重要的是,它從根本上解決了應用系統間的信息交換。因為XML滿(mǎn)足了兩個(gè)基本的需求:
(1).將數據和表達形式分離。就象天氣預報的信息可以顯示在不同的設備上,電視,手機或者其它。
(2).在不同的應用之間傳輸數據。電子商務(wù)數據交換的與日俱增使得這種需求越來(lái)越緊迫。
為了使數據便于人們的閱讀理解,我們需要將信息顯示出來(lái)或者打印出來(lái),例如將數據變成一個(gè)HTML文件,一個(gè)PDF文件,甚至是一段聲音;同樣,為了使數據適合不同的應用程序,我們必須有能夠將一種數據格式轉換為另一種數據格式,比如需求格式可能是一個(gè)文本文件,一個(gè)SQL語(yǔ)句,一個(gè)HTTP信息,一定順序的數據調用等。而XSLT就是我們用來(lái)實(shí)現這種轉換功能的語(yǔ)言。將XML轉換為HTML,是目前XSLT最主要的功能。
1.3 XSLT的歷史
想很多其他XML家族成員一樣,XSLT是由W3C起草和制定的。它的主要發(fā)展歷程如下:
.1995年由James Clark提議;
.1997年8月正式提案為XSL;
.1998年5月由Norman Walsh完成需求概要;
.1998年8月18日XSL草案發(fā)布;
.1999年11月16日正式發(fā)布XSL 1.0推薦版本。
目前,XSLT仍然在快速的發(fā)展中,XSLT1.1的草案已經(jīng)可以在W3C網(wǎng)站(http://www.w3.org/TR/xslt11)上看到。
1.4 什么是XPath
XPath是XSLT的重要組成部分,我們將在第四章講解它的詳細語(yǔ)法。那么XPath是什么呢?我們首先來(lái)了解一下XSL系列的"家族"關(guān)系。如下圖:

1.5 XSLT和CSS的比較
CSS同樣可以格式化XML文檔,那么有了CSS為什么還需要XSLT呢?因為CSS雖然能夠很好的控制輸出的樣式,比如色彩,字體,大小等,但是它有嚴重的局限性,就是:
(1) CSS不能重新排序文檔中的元素;
(2) CSS不能判斷和控制哪個(gè)元素被顯示,哪個(gè)不被顯示;
(3) CSS不能統計計算元素中的數據;
換句話(huà)說(shuō),CSS只適合用于輸出比較固定的最終文檔。CSS的優(yōu)點(diǎn)是簡(jiǎn)潔,消耗系統資源少;而XSLT雖然功能強大,但因為要重新索引XML結構樹(shù),所以消耗內存比較多。
因此,我們常常將它們結合起來(lái)使用,比如在服務(wù)器端用XSLT處理文檔,在客戶(hù)端用CSS來(lái)控制顯示??梢詼p少響應時(shí)間。
1.6 XSLT和IE5
在XSLT草案發(fā)布不久,微軟就在IE4中提供了支持XSL功能的預覽版本,到IE5.0發(fā)布時(shí),正式全面支持XSLT,可是由于IE5發(fā)布的比XSLT1.0標準時(shí)間早,因此在IE5.0中支持的XSTL功能和XSLT 1.0略有不同。(呵呵~~XML推行的主要原因之一就是解決HTML過(guò)分依賴(lài)瀏覽器的問(wèn)題,現在微軟又想標新立異?)。好在微軟的IE5.5中執行的標準已經(jīng)和W3C的XSLT1.0基本相近。但令人頭疼的是IE5.0已經(jīng)發(fā)行了幾百萬(wàn)套,您使用的XSLT很可能不能被客戶(hù)的瀏覽器正確執行。目前XSLT 1.1仍在發(fā)展中,W3C及有關(guān)組織也在和微軟協(xié)商爭取獲得統一。呵呵~~故事還遠遠沒(méi)有結束噢。
注意:本文中提到的語(yǔ)法都是根據XSLT 1.0的標準來(lái)講的,沒(méi)有任何微軟的"方言"。
Posted by 老冒 at 16:11 閱讀(87) 評論(4) 引用(0) 技術(shù)文摘
開(kāi)放權限:所有人可見(jiàn)
2.XSLT的實(shí)例
2.1 XSLT如何轉換XML
2.2 一個(gè)實(shí)例
2.3 過(guò)程解析
2.4 XSLT的用途
2.1 XSLT如何轉換XML
我們打個(gè)有趣的比方,你玩過(guò)橡皮泥吧,用不同的模子按上去,就可以做出需要的形狀。如果我們假設XML數據文檔是一塊大橡皮泥,XSLT就象是一個(gè)模子,用力一按,就做出需要的形狀來(lái)---符合不同需要的HTML文檔。
具體看下面的過(guò)程示意圖:

2.2 一個(gè)實(shí)例
現在我們來(lái)看一個(gè)簡(jiǎn)單的XSLT實(shí)際應用例子,獲得一些感官上的認識。很多網(wǎng)頁(yè)設計師看到類(lèi)似HTML的代碼才會(huì )放心,代碼是那樣的親切和熟悉。
例子1: "Hello, world!"
hello world作為第一個(gè)教程已經(jīng)是程序語(yǔ)言中的慣例了。我們也遵守這個(gè)慣例,看看如何利用XSLT來(lái)顯示"hello world"。雖然這個(gè)例子沒(méi)有什么實(shí)際用途,但是請大家不要急,后面還有更詳細的例子。
第一步:建立要輸入XML文檔hello.xml。
<?xml version="1.0" encoding="iso-8859-1"?>
<greeting>Hello, world!</greeting>
這是一個(gè)很簡(jiǎn)單XML文檔,只包含一個(gè)節點(diǎn)的XML結構樹(shù)。
第二步:建立XSLT文檔hello.xsl。提示:默認的XSLT文件的后綴名為.xsl。
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<html>
<head>
<title>First XSLT example</title>
</head>
<body>
<p><xsl:value-of select="greeting"/></p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
你現在可以用IE5.0以上版本瀏覽器打開(kāi)這個(gè)hello.xsl文件,看到XSL的結構樹(shù)。
第三步:在XML中調用這個(gè)XSL文件。修改hello.xml的代碼為:
<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet type="text/xsl" href="hello.xsl"?>
<greeting>Hello, world!</greeting>
ok,到這一步原理上已經(jīng)完成了所有的代碼,接下來(lái)只要用一個(gè)XSLT的處理器(XML Processor)來(lái)執行hello.xml就可以看到"hello
world"的顯示結果了。流行的處理器軟件有以下幾種:
(1).James Clark的XT。下載網(wǎng)址:http://www.jclark.com/xml/xt.html
(2).IBM的XML for Java軟件包,名為L(cháng)otusXSL。下載網(wǎng)址:www.alphaworks.ibm.com/tech/xml4j
(3).Saxon。下載網(wǎng)址:http://www.wrox.com
(4).微軟的MSXML3。下載網(wǎng)址:http://www.microsoft.com/xml
有網(wǎng)友要問(wèn),我想在瀏覽器中看到"hello world"的效果應該怎么做?在微軟的IE5.5內嵌了MSXML3解釋器,你可以用IE5.5打開(kāi)hello.xml文件,就可以看到結果。如果只看到XML結構樹(shù),不是單獨的"hello
world"字樣,說(shuō)明你的瀏覽器沒(méi)有安裝MSXML3版本。
如果沒(méi)有安裝又想看效果怎么辦?那還是用我們在XML教程中的老辦法,采用JS實(shí)現。(這已經(jīng)超出了本文要講的范圍,但為了更加直觀(guān),便于理解,我們在這里提供實(shí)例代碼。)下面是一種實(shí)現的代碼,可以保存為hello.htm,和上面的hello.xml,hello.xsl放在同一目錄下面。最后用IE5.0以上版本打開(kāi)hello.htm就可以看到效果了。
<html>
<head>
<script language="javascript" for="window" event="onload">
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.load("hello.xml");
nodes = xmlDoc.documentElement.childNodes;
greeting.innerText = nodes.item(0).text;
</script>
<title>First XSLT Example</title>
</head>
<body bgcolor="#FFFFFF">
<span id="greeting"></span><br>
</body>
</html>
2.3 過(guò)程解析
如果你成功的看到效果,你也許想知道這些代碼的具體含義,我們來(lái)詳細解說(shuō):看hello.xsl文件
<?xml version="1.0" encoding="iso-8859-1"?>
這是標準的XML文檔的首行代碼,因為XSLT本身也是XML文檔。encoding屬性用來(lái)定義文檔使用的編碼形式,iso-8859-1主要支持西歐和北美的語(yǔ)言編碼。如果你想使用簡(jiǎn)體中文,那么就應該寫(xiě)成:
<?xml version="1.0" encoding="GB2312"?>
接下去的代碼是:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
這是標準的XSLT文件首行代碼。xsl:stylesheet代碼的意思是將文檔作為一個(gè)樣式表來(lái)(stylesheet)處理。xmlns:xsl屬性是一個(gè)名字空間聲明,和XML中的名字空間使用方法一樣,用來(lái)防止元素名稱(chēng)重復和混亂。其中前綴xsl的意思是文檔中使用的元素遵守W3C的XSLT規范。最后的version屬性說(shuō)明樣式表只采用XSLT
1.0的標準功能,這也是目前僅有的標準。
<xsl:template match="/">
一個(gè)<xsl:template>元素定義一個(gè)模板規則。屬性match="/"說(shuō)明XML源文檔中,這個(gè)模板規則作用的起點(diǎn)。"/"是一種XPath語(yǔ)法,我們在后面將詳細講述,這里的"/"代表XML結構樹(shù)的根(root)。
接下去的代碼是:
<html>
<head>
<title>First XSLT Example</title>
</head>
<body>
<p><xsl:value-of select="greeting"/></p>
</body>
</html>
說(shuō)明:當模板規則被觸發(fā),模板的內容就會(huì )控制輸出的結果。例子中,模板大部分內容由HTML元素和文本構成。只有<xsl:value-of>元素是XSLT語(yǔ)法,這里<xsl:value-of>的作用是拷貝原文檔中的一個(gè)節點(diǎn)的值到輸出文檔。而select屬性則詳細指定要處理的節點(diǎn)名稱(chēng)。這是XPath語(yǔ)法,"greeting"的意思就是尋找根節點(diǎn)名為greeting的元素,并用模板來(lái)處理這個(gè)節點(diǎn)。具體的就是找到<greeting>元素,然后將元素的值"hello
world"按模板樣式拷貝到輸出文件。
提示:由于XML文檔是嚴格的層級結構(用IE5查看XML文件,會(huì )看見(jiàn)XML文檔類(lèi)似多級關(guān)聯(lián)菜單),所以我們形象的稱(chēng)XML文檔為文檔樹(shù),其中每一對元素稱(chēng)作樹(shù)的一個(gè)節點(diǎn)。根元素就是根節點(diǎn)。
最后關(guān)閉所有元素:
</xsl:template>
</xsl:stylesheet>
好,例子解說(shuō)完畢。你是否想過(guò)為什么要用這么復雜的方法來(lái)顯示"hello world"呢?
關(guān)鍵不在表面,而在于實(shí)質(zhì):用這種方法,hello world可以從XML文檔中被提取出來(lái),并用各種不同的XSLT模板處理,來(lái)輸出不同需求的文檔。我們來(lái)看看XSLT的主要用途:
2.4 XSLT的用途
XSLT的主要用途就是數據轉換應用。
由于以XML為基礎的電子商務(wù)廣泛普及,XSLT作為數據轉換的角色也越來(lái)越重要。例如直接將電視新聞的數據格式轉換成報紙新聞需要的數據格式;將股票數據直接轉換成圖片顯示在網(wǎng)頁(yè)上;對EDI(電子數據交換)數據進(jìn)行統計,排序等等。
XSLT是處理類(lèi)似工作的理想工具。
Posted by 老冒 at 2005-08-14 16:16:11
通過(guò)前面兩章的介紹,我們已經(jīng)對XSLT的基本概念和它的轉換過(guò)程有了一些了解。下面我們一起來(lái)學(xué)習XSLT的具體語(yǔ)法。說(shuō)到語(yǔ)法總是比較枯燥的,您可以大體上瀏覽一遍,等您真正需要使用XSLT的時(shí)候,再仔細研究它們。
3.XSLT的元素語(yǔ)法
3.1 xsl:template和xsl:apply-templates
3.2 xsl:value-of
3.3 xsl:for-each
3.4 xsl:if
3.5 Xxsl:choose, when, otherwise
3.6 xsl:sort
3.1 xsl:template和xsl:apply-templates
模板(template)是XSLT中最重要的概念之一。XSLT文件就是由一個(gè)一個(gè)的模板組成,任何一個(gè)XSLT文件至少包含一個(gè)模板。模板的概念就象是搭積木;你如果是程序員,也可以將模板看作一個(gè)方法,一個(gè)類(lèi),或者一個(gè)模塊。它們可以被拼裝組合,也可以單獨成塊,不同的模板控制不同的輸出格式。
模板(template)由兩部分組成:匹配模式(match pattern)和執行。簡(jiǎn)單的講模式定義XML源文檔中哪一個(gè)節點(diǎn)將被模板處理,執行則定義輸出的是什么格式。兩部分對應的語(yǔ)法為xsl:template和xsl:apply-templates。
xsl:template的語(yǔ)法是:
<xsl:template
match = pattern
name = qname
priority = number
mode = qname>
<!-- 執行內容 -->
</xsl:template>
xsl:template的作用是定義一個(gè)新模板。屬性中name,priority,和mode用來(lái)區別匹配同一節點(diǎn)的不同模板。它們不是常用的屬性。match屬性則控制模板的匹配模式(pattern),匹配模式是用來(lái)定位XML源文檔中哪一個(gè)節點(diǎn)被模板處理。一個(gè)模板匹配一個(gè)節點(diǎn)。我們用一個(gè)例子來(lái)幫助理解:
假設我們要處理一個(gè)包含章節和段落文檔。我們用para元素定義段落,用chapter元素定義章節。我們來(lái)看看match屬性可能的值。下面的語(yǔ)句寫(xiě)法說(shuō)明模板匹配所有的para元素
<xsl:template match="para">
</xsl:template>
下面的語(yǔ)句寫(xiě)法說(shuō)明模板匹配所有的para元素和所有的chapter元素:
<xsl:template match="(chapter|para)">
</xsl:template>
下面的語(yǔ)句寫(xiě)法說(shuō)明模板匹配所有的父節點(diǎn)為chapter元素的para元素:
<xsl:template match="chapter//para">
</xsl:template>
下面的語(yǔ)句寫(xiě)法說(shuō)明模板匹配根節點(diǎn):
<xsl:template match="/">
</xsl:template>
我們再來(lái)看apply-templates語(yǔ)法:
<xsl:apply-templates
select = node set-expression
mode = qname>
</xsl:apply-templates>
xsl:apply-templates用來(lái)執行那一個(gè)節點(diǎn)被模板具體處理。你可以將它理解為程序中調用子函數。select屬性用來(lái)定義確切的節點(diǎn)名稱(chēng)。xsl:apply-templates總是包含在xsl:template元素中,象這樣:
<xsl:template match="/">
<xsl:apply-templates select="para"/>
</xsl:template>
這段代碼說(shuō)明摸板匹配整個(gè)文檔(根節點(diǎn)),具體執行時(shí)處理根節點(diǎn)下所有para元素。
<xsl:template match="para">
<p><xsl:apply-templates/></p>
</xsl:template>
而這一段代碼則表示摸板匹配para節點(diǎn),所有para下的子元素都將被處理。
3.2 xsl:value-of
XSL:value-of用來(lái)將源文檔中元素的文本值寫(xiě)到輸出文檔中。例如:
有一個(gè)個(gè)人資料的XML文檔:
<?xml version="1.0" encoding="iso-8859-1"?>
<PERSON>
<name>ajie</name>
<age>28</age>
</PERSON>
我如果想在輸出文檔中顯示上面這個(gè)XML源文檔中的name元素的值,可以這樣寫(xiě)XSLT代碼:
<xsl:template match="PERSON">
<xsl:value-of select="name"/>
</xsl:template>
執行后,你會(huì )看到"ajie"被單獨顯示出來(lái)。其中match="PERSON"定義摸板匹配PERSON節點(diǎn),xsl:value-of
語(yǔ)法說(shuō)明需要輸出一個(gè)節點(diǎn)的值,而select="name"則定義需要被輸出的元素為name??催@個(gè)過(guò)程是不是和數據庫里查詢(xún)一個(gè)人的名字很象?當然,xsl:value-of查詢(xún)還有更多,更復雜的語(yǔ)法,因為是涉及尋找和定位的功能,我們會(huì )放在后面的XPath語(yǔ)法中在仔細講解。
同樣功能的還有xsl:copy-of,用法一樣,就不重復解釋了。
3.3 xsl:for-each
xsl:for-each語(yǔ)法允許你循環(huán)處理被選擇的節點(diǎn)。例如:有一個(gè)含多個(gè)個(gè)人資料的XML文檔:
<?xml version="1.0" encoding="iso-8859-1"?>
<PEOPLE>
<PERSON>
<name>ajie</name>
<age>28</age>
</PERSON>
<PERSON>
<name>tom</name>
<age>24</age>
</PERSON>
<PERSON>
<name>miake</name>
<age>30</age>
</PERSON>
</PEOPLE>
我需要顯示所有人的姓名,則可以將XSLT代碼寫(xiě)成:
<xsl:template match="PEOPLE">
<xsl:for-each select="child::PERSON">
<xsl:value-of select="name"/>
</ xsl:for-each>
</xsl:template>
3.4 xsl:if
xsl:if類(lèi)似普通程序語(yǔ)言的if條件語(yǔ)句,允許設定節點(diǎn)滿(mǎn)足某個(gè)條件時(shí),被模板處理。xsl:if的語(yǔ)法格式為:
<xsl:if test=布爾表達式>
template body
</xsl:if>
例如:
<xsl:template match="PEOPLE">
<xsl:if test="@name">
<p><xsl:value-of select="@name"/></p>
</xsl:if>
</xsl:template>
這段代碼的意思是檢測PEOPLE節點(diǎn)下所有的元素,如果發(fā)現有<name>元素,則將<name>元素的值輸出。其中@符號是統配符,表示節點(diǎn)下所有的元素。
3.5 xsl:choose, xsl:when 和 xsl:otherwise
xsl:if語(yǔ)法沒(méi)有else的屬性。如果我們要進(jìn)行多項選擇,那么就要使用xsl:choose / xsl:when / xsl:otherwise系列流程控制語(yǔ)法了。具體的使用請看下面的XSL文件例子:
<xsl:template match="PEOPLE">
<xsl:choose>
<xsl:when test="@name = ‘a(chǎn)jie‘">
<B><xsl:value-of select="@name"/></B>
</xsl:when>
<xsl:when test="@name">
<I><xsl:value-of select="@name"/></I>
</xsl:when>
<xsl:otherwise>
No name available
</xsl:otherwise>
<xsl:choose>
</xsl:template>
說(shuō)明:首先在PEOPLE節點(diǎn)下尋找<name>屬性值為ajie的元素,如果找到,將ajie用粗體輸出;如果沒(méi)有發(fā)現值為ajie的<name>元素,則將所有的<name>元素的值都用斜體輸出;如果沒(méi)有發(fā)現任何<name>元素,則顯示"No
name available"。
3.6 xsl:sort
在XSLT中可以對XML源文檔的元素進(jìn)行重新排序,排序的語(yǔ)法就是xsl:sort。舉例:下面的代碼就是將文檔元素按name排序。
<xsl:template match="PEOPLE">
<xsl:apply-templates select="PERSON">
<xsl:sort select="@name"/>
</xsl:apply-templates>
</xsl:template>
以上是XSLT的元素的主要語(yǔ)法,還有很多其他的語(yǔ)法,例如:import, include, element, attribute, number, param等等語(yǔ)法,在這里就不一一解釋。我們的目的是讓您對XSLT的語(yǔ)法有基本的概念,理解XSLT作為一種轉換語(yǔ)言的強大功能。
Posted by 老冒 at 2005-08-14 16:17:29
4.XPath的語(yǔ)法
我們在前面已經(jīng)提到過(guò),XPath是用來(lái)幫助XSLT在XML源文檔中查找定位信息的語(yǔ)言。在實(shí)際使用過(guò)程中,XPath和XSLT總是混在一起使用,在上面一章的語(yǔ)法例子中我們已經(jīng)有使用到XPath的語(yǔ)法,只是沒(méi)有明確點(diǎn)出。但W3C將它們分成兩個(gè)標準,所以我們也將它們拆成兩章來(lái)講解。
4.XPath的語(yǔ)法
4.1 當前位置
4.2 尋址操作
4.3 運算符
4.4 功能函數
4.1 當前位置
當我們使用XSLT處理XML源文檔是,我們用Context來(lái)表示當前正在被模板處理的節點(diǎn)位置。比如xsl:template match="/"語(yǔ)句中表示Context在文檔的根(root)節點(diǎn)。我不知道如何準確的翻譯Context這個(gè)詞,它類(lèi)似于C語(yǔ)言里的指針,表示程序當前運行的位置。理解Context對于正確處理XSL模板非常重要,當您的XSL模板輸出的文檔和您想要的不一樣,最先應該分析的就是Context在哪里。
Location Paths是用于設定你想要尋找的Context節點(diǎn)位置。就類(lèi)似DOS的目錄命令。我們看個(gè)例子
<xsl:for-each select="child::PEOPLE/descendant::PERSON">
其中child::PEOPLE/descendant::PERSON就是XPath語(yǔ)法,這個(gè)表達式就是一個(gè)Location Paths,代碼說(shuō)明要顯示所有PEOPLE元素的子元素和所有PERSON元素的子元素。通常我們會(huì )采用更簡(jiǎn)單的寫(xiě)法:
<xsl:for-each select="PEOPLE//PERSON">
我們來(lái)解釋path的兩種表示方法:"/"和"http://"。
"/"是表示當前文檔的節點(diǎn),類(lèi)似DOS目錄分割符。例如:/PEOPLE表示選擇根節點(diǎn)下的PEOPLE元素;PEOPLE/PERSON表示選擇PEOPLE元素下所有的PESON子元素。
"http://"則表示當前文檔所有的節點(diǎn)。類(lèi)似查看整個(gè)目錄。例如://PEOPLE表示選擇文檔中所有的PEOPLE元素,無(wú)論它在什么層次;PEOPLE//PERSON表示在PEOPLE元素下所有的PERSON元素,無(wú)論它的層次多深。
4.2 尋址操作
Axis和Predicate是XPath語(yǔ)法中對Location Paths進(jìn)行定位操作的語(yǔ)法,具體的用法列表如下
Axis語(yǔ)法表
--------------------------------------------------------
表達式 簡(jiǎn)寫(xiě) 說(shuō)明
--------------------------------------------------------
self . 選擇當前的節點(diǎn).。
例子 :
<TD><xsl:value-of select="."/></TD>
代碼表示在當前位置插入當前的節點(diǎn)包含的文本(text)值,
--------------------------------------------------------
parent .. 選擇當前節點(diǎn)的父節點(diǎn)。
--------------------------------------------------------
attribute @ 選擇一個(gè)元素的所有屬性。
例子:
<TD><xsl:value-of select="@PERSONID"/></TD>
選擇PERSON元素的所有屬性.
--------------------------------------------------------
child 選擇當前節點(diǎn)的所有子元素。
--------------------------------------------------------
ancestor 選擇當前節點(diǎn)的所有父元素(包括父元素的父元素,類(lèi)推)
--------------------------------------------------------
Axis幫助我們選擇當前節點(diǎn)周?chē)械墓濣c(diǎn),而Predicate則用來(lái)定位當前節點(diǎn)內部的元素。表示方法為方括號[]中加表達式:[ Expression ]。具體舉例如下:
PERSON[position()=2]
這句代碼表示尋找第二個(gè)"PERSON" 元素
PERSON[starts-with(name, "B")]
這句代碼表示尋找所有名稱(chēng)以"B"開(kāi)頭的PERSON元素。
4.3 運算符
這一節介紹XPath的運算符(Expressions),列表如下:
--------------------------------------------------------
運算符 說(shuō)明
--------------------------------------------------------
and, or 就是普通意義的and, or
--------------------------------------------------------
= 等于
--------------------------------------------------------
!= 不等于
--------------------------------------------------------
>, >= 大于,大于等于
--------------------------------------------------------
<, <= 小于,小于等于。注意:在XSL文件中,<符號要用< 表示
--------------------------------------------------------
+, -, *, div 加減乘除
--------------------------------------------------------
mod 取模
--------------------------------------------------------
| 兩個(gè)節點(diǎn)一起計算
--------------------------------------------------------
4.4 功能函數(Functions)
在XPath里有很多功能函數可以幫助我們精確尋找需要的節點(diǎn)。
count()功能
作用:統計計數,返回符合條件的節點(diǎn)的個(gè)數。
舉例:<p><xsl:value-of select="count(PERSON[name=tom])"/></p>
說(shuō)明:代碼的用途是顯示PERSON元素中姓名屬性值為tom有幾個(gè)。
number()功能
作用:將屬性的值中的文本轉換為數值。
舉例:<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ō)明:代碼的用途是計算所有價(jià)格的和。
上面這些功能只是XPath語(yǔ)法中的一部分,還有大量的功能函數沒(méi)有介紹,而且目前XPath的語(yǔ)法仍然在不斷發(fā)展中。通過(guò)這些函數我們可以實(shí)現更加復雜的查詢(xún)和操作。
看到這里,我們的入門(mén)教程就快結束了。通過(guò)走馬觀(guān)花式的快速學(xué)習,希望大家對XSLT應該有了一點(diǎn)基本概念:XSLT是一種轉換XML文檔的語(yǔ)言,它包含兩個(gè)過(guò)程:轉換和格式化。XSLT的功能比CSS強大得多,它有類(lèi)似數據查詢(xún)的語(yǔ)法。如果您對XSLT感興趣,那么以上的知識是遠遠不夠的,需要查詢(xún)更多的資料。阿捷在最后一章附錄為大家提供了主要的XSLT資源。
4.4 功能函數(Functions)
在XPath里有很多功能函數可以幫助我們精確尋找需要的節點(diǎn)。
count()功能
作用:統計計數,返回符合條件的節點(diǎn)的個(gè)數。
舉例:<p><xsl:value-of select="count(PERSON[name=tom])"/></p>
說(shuō)明:代碼的用途是顯示PERSON元素中姓名屬性值為tom有幾個(gè)。
number()功能
作用:將屬性的值中的文本轉換為數值。
舉例:<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ō)明:代碼的用途是計算所有價(jià)格的和。
上面這些功能只是XPath語(yǔ)法中的一部分,還有大量的功能函數沒(méi)有介紹,而且目前XPath的語(yǔ)法仍然在不斷發(fā)展中。通過(guò)這些函數我們可以實(shí)現更加復雜的查詢(xún)和操作。
看到這里,我們的入門(mén)教程就快結束了。通過(guò)走馬觀(guān)花式的快速學(xué)習,希望大家對XSLT應該有了一點(diǎn)基本概念:XSLT是一種轉換XML文檔的語(yǔ)言,它包含兩個(gè)過(guò)程:轉換和格式化。XSLT的功能比CSS強大得多,它有類(lèi)似數據查詢(xún)的語(yǔ)法。如果您對XSLT感興趣,那么以上的知識是遠遠不夠的,需要查詢(xún)更多的資料。阿捷在最后一章附錄為大家提供了主要的XSLT資源。
Posted by 老冒 at 2005-08-14 16:19:14
聯(lián)系客服