我們將選擇你已經(jīng)在以前的信息里了解的各種各樣的功能和表達(dá)方式并且描述怎樣把他們嵌入在處理指令的順序里面。通常,這發(fā)生在一些
操縱和處理特定的文檔節(jié)點(diǎn)
使用<xsl:call-template>來處理一些節(jié)點(diǎn)而不是現(xiàn)在的文檔節(jié)點(diǎn),最迅速的技術(shù)是將元素<xsl:call-template>置于一個<xsl:for-each>元素內(nèi)部,但是你也可以為一個目標(biāo)模板提供一個唯一的節(jié)點(diǎn)名字,并且使用<xsl:apply-template>元素來應(yīng)用于一些具體的節(jié)點(diǎn)。但是,"為每一個"建造, 是完全反復(fù)并且在特定的情形里更有意義的,在這些特定的情況下,在一份文檔或者結(jié)果樹里的全部節(jié)點(diǎn)無論如何都需要被處理。 你將發(fā)現(xiàn)這種方法的例子,有人在Michael Kay的XSLT 程序員參考里完全地詳細(xì)說明。他也解釋一種靈巧的技術(shù),該技術(shù)描述了在一個<xsl:variable>元素里面調(diào)用<xsl:call-template>的方法。在<xsl:variable>元素里,一個簡單的從結(jié)果樹到字符行為的轉(zhuǎn)換就好像<xsl:call-template>元素正從它的調(diào)用中返回的一個結(jié)果。
這類過程的結(jié)構(gòu)可能被如下的方式說明, 在下面已給在方括號內(nèi)的裝入的字符值的模版在一個變量元素內(nèi)被調(diào)用。
<!-- start with template definition, proceed to variable
element -->
<xsl:template name="bracketit">
<xsl:param name="string" />
<xsl:value-of select="concat("'[', $string, ']')"/>
</xsl:template>
<xsl:variable name="cite-in-brackets">
<xsl:call-template name="bracketit"/>
<xsl:with-param name="string" select="@cite"/>
</xsl:call-template>
</xsl:variable>
如果cite屬性的值是Horn79,那么變量cite-in-brackets 的結(jié)果值為 [Horn79 ].
使用遞推處理項(xiàng)目列表
XSLT沒有像使用在傳統(tǒng)的編程語言里的用來處理具體的計(jì)數(shù)行為的計(jì)數(shù)器一樣的自動增加的變量,也不支持傳統(tǒng)語言中的有條件的循環(huán)結(jié)構(gòu),例如while, for, 或者until 。 但是XSLT確實(shí)支持遞推,提供一種方便的方法達(dá)到相同的目的。這個過程的這種方法導(dǎo)致了遞歸函數(shù)調(diào)用的建立, 這里功能接連不斷被用于在一個列表中的第一個節(jié)點(diǎn)或者一個字符串里面的第一個非空節(jié)點(diǎn), 并且功能也被適用于列表節(jié)點(diǎn)或者字符串的剩余部分——即在帶有第一個要素或者字符順序從它的內(nèi)容除去后剩下的部分。 對每種類型的數(shù)據(jù)來說,處理會一直進(jìn)行,直到列表或者字符串是空的的時候,即當(dāng)不再有節(jié)點(diǎn)出現(xiàn)或者非空的字符存在在剩余的部分的時候。在他的書名為Mastering XSLT 的Sybex書中,Chuck White 指出XSLT 該方法是"重復(fù)每一個命名了的表達(dá)式的實(shí)例的結(jié)果片段。"
管理有條件處理
<xsl:choose>
<xsl:when test="expression">
<!-- processing statements -->
</xsl:when>
<xsl:otherwise>
<!-- processing statements -->
</xsl:otherwise>
</xsl:choose>