XSLT簡(jiǎn)單基礎(chǔ)第3章:XSLT的元素語(yǔ)法(2)
發(fā)表時(shí)間:2024-06-13 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]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下的子元素都將被處理。