明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

XSLT簡(jiǎn)單基礎(chǔ)第3章:XSLT的元素語(yǔ)法(2)

[摘要]3.1 xsl:template和xsl:apply-templates模板(template)是XSLT中最重要的概念之一。XSLT文件就是由一個(gè)一個(gè)的模板組成,任何一個(gè)XSLT文件至少包含一個(gè)模板。模板的概念就象是搭積木;你如果是程序員,也可以將模板看作一個(gè)方法,一個(gè)類,或者一個(gè)模塊。它們可以...

3.1 xsl:template和xsl:apply-templates


模板(template)是XSLT中最重要的概念之一。XSLT文件就是由一個(gè)一個(gè)的模板組成,任何一個(gè)XSLT文件至少包含一個(gè)模板。模板的概念就象是搭積木;你如果是程序員,也可以將模板看作一個(gè)方法,一個(gè)類,或者一個(gè)模塊。它們可以被拼裝組合,也可以單獨(dú)成塊,不同的模板控制不同的輸出格式。

模板(template)由兩部分組成:匹配模式(match pattern)和執(zhí)行。簡(jiǎn)單的講模式定義XML源文檔中哪一個(gè)節(jié)點(diǎn)將被模板處理,執(zhí)行則定義輸出的是什么格式。兩部分對(duì)應(yīng)的語(yǔ)法為xsl:template和xsl:apply-templates。


xsl:template的語(yǔ)法是:


<xsl:template

match = pattern

name = qname

priority = number

mode = qname>

<!-- 執(zhí)行內(nèi)容 -->

</xsl:template>


xsl:template的作用是定義一個(gè)新模板。屬性中name,priority,和mode用來(lái)區(qū)別匹配同一節(jié)點(diǎn)的不同模板。它們不是常用的屬性。match屬性則控制模板的匹配模式(pattern),匹配模式是用來(lái)定位XML源文檔中哪一個(gè)節(jié)點(diǎn)被模板處理。一個(gè)模板匹配一個(gè)節(jié)點(diǎn)。我們用一個(gè)例子來(lái)幫助理解:

假設(shè)我們要處理一個(gè)包含章節(jié)和段落文檔。我們用para元素定義段落,用chapter元素定義章節(jié)。我們來(lái)看看match屬性可能的值。下面的語(yǔ)句寫法說(shuō)明模板匹配所有的para元素


<xsl:template match="para">

</xsl:template>


下面的語(yǔ)句寫法說(shuō)明模板匹配所有的para元素和所有的chapter元素:


<xsl:template match="(chapter para)">

</xsl:template>


下面的語(yǔ)句寫法說(shuō)明模板匹配所有的父節(jié)點(diǎn)為chapter元素的para元素:


<xsl:template match="chapter//para">

</xsl:template>


下面的語(yǔ)句寫法說(shuō)明模板匹配根節(jié)點(diǎn):


<xsl:template match="/">

</xsl:template>


我們?cè)賮?lái)看apply-templates語(yǔ)法:


<xsl:apply-templates

select = node set-expression

mode = qname>

</xsl:apply-templates>


xsl:apply-templates用來(lái)執(zhí)行那一個(gè)節(jié)點(diǎn)被模板具體處理。你可以將它理解為程序中調(diào)用子函數(shù)。select屬性用來(lái)定義確切的節(jié)點(diǎn)名稱。xsl:apply-templates總是包含在xsl:template元素中,象這樣:


<xsl:template match="/">

<xsl:apply-templates select="para"/>

</xsl:template>


這段代碼說(shuō)明摸板匹配整個(gè)文檔(根節(jié)點(diǎn)),具體執(zhí)行時(shí)處理根節(jié)點(diǎn)下所有para元素。


<xsl:template match="para">

<p><xsl:apply-templates/></p>

</xsl:template>


而這一段代碼則表示摸板匹配para節(jié)點(diǎn),所有para下的子元素都將被處理。