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