XSLT表達式處理技術

我們將選擇你已經在以前的信息裏瞭解的各種各樣的功能和表達方式並且描述怎樣把他們嵌入在處理指令的順序裏面。通常,這發生在一些標記的元素或者其他標記的元素的範圍內,因爲這些元素在XSLT裏履行了特定的角色的功能,和在很多編程語言內的那些函數或者子程序調用所起到的作用相同。 實際上,在特定的上下文中,你將發現XSLT中的大多數反覆和遞歸結構都靠岸工作的——在接下來的講解中將會瞭解到。

  操縱和處理特定的文檔節點

  使用<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>元素正從它的調用中返回的一個結果。  如果cite屬性的值是Horn79,那麼變量cite-in-brackets 的結果值爲 [Horn79 ].

  這類過程的結構可能被如下的方式說明, 在下面已給在方括號內的裝入的字符值的模版在一個變量元素內被調用。

<!-- 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>

 

  使用遞推處理項目列表

  XSLT沒有像使用在傳統的編程語言裏的用來處理具體的計數行爲的計數器一樣的自動增加的變量,也不支持傳統語言中的有條件的循環結構,例如while, for, 或者until 。 但是XSLT確實支持遞推,提供一種方便的方法達到相同的目的。這個過程的這種方法導致了遞歸函數調用的建立, 這裏功能接連不斷被用於在一個列表中的第一個節點或者一個字符串裏面的第一個非空節點, 並且功能也被適用於列表節點或者字符串的剩餘部分——即在帶有第一個要素或者字符順序從它的內容除去後剩下的部分。 對每種類型的數據來說,處理會一直進行,直到列表或者字符串是空的的時候,即當不再有節點出現或者非空的字符存在在剩餘的部分的時候。在他的書名爲Mastering XSLT 的Sybex書中,Chuck White 指出XSLT 該方法是"重複每一個命名了的表達式的實例的結果片段。"

  管理有條件處理

  <xsl:choose> 和<xsl:when> 元素允許可能需要多個選擇的條件轉移;一個<xsl:otherwise>元素甚至允許明確處理那些沒有通過確定的具體的測試的項目。 那些基本句法提供一個看起來很象典型的具有特定的嵌套的if-then-else語句的構造結構。White清楚地說明了下面的這些在Mastering XSLT的語句在去除了實際的賦值或者限制之後的基本句法。

<xsl:choose>
  <xsl:when test="expression">
     <!-- processing statements -->
  </xsl:when>
  <xsl:otherwise>
     <!-- processing statements -->
  </xsl:otherwise>
</xsl:choose>

  鑑於XSLT 如此容易支持的各種各樣的技術,這使得你可以相當容易的構建你自己的處理在遍歷,遞推和有條件的測試技術方面的例子的文檔。 你也能再訪XSLT的指導,來獲得更多的插圖和例子,或者也可以翻閱更精心製作和冗長的例子的Sal Mangano的XSLT Cookbook (O'Reilly, 2003),那些例子你都能直接的在你的應用中輕鬆的導入和選擇。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章