分支處理
1:<if.../>:使用時,指定以個test屬性,屬性值爲一個布爾表達式,元素內容爲模板內容。
<xsl:if test=boolean-expression>
<!-- Content: template -->
</xsl:if>
2:<choose.../>、<when.../>和<otherwise.../>分別相當於java中if、else if、else
<xsl:choose>
<xsl:when test=boolean-expression>
<!-- Content: template -->
</xsl:when>
<xsl:when test=boolean-expression>
<!-- Content: template -->
</xsl:when>
...
<xsl:otherwise>
<!-- Content: template -->
</xsl:otherwise>
</xsl:choose>
循環控制
<!-- Category: instruction -->
<xsl:for-each
select = node-set-expression>
<!-- Content: (xsl:sort*, template) -->
</xsl:for-each>
<for-each../>:需指定一個select屬性,屬性值爲XPath表達式,表示一個節點集,其將依次迭代節點集內的每個節點。
<for-each select="">
<!-- Content: template -->
</for-each>
<for-each.../>有顯式迭代功能,而<apply-templates.../>具有隱式迭代功能。
排序控制
<xsl:sort
select = string-expression
lang = { nmtoken }
data-type = { "text" | "number" | qname-but-not-ncname }
order = { "ascending" | "descending" }
case-order = { "upper-first" | "lower-first" } />
lang:指定排序關鍵字,若未指定,將根據系統環境來確定。
date-type:指定字符串的數據類型,有以下可選屬性值:
text:按照字母順序排序,通過lang屬性指定;
number:將排序關鍵字轉換成數值,在根據數值進行排序,通過number函數轉換,忽略lang屬性;
QName:展開擴展名稱,標識該數據類型。
order:指定使用升序排列還是降序排列,默認是升序排列。
case-order:指定大寫字母和小寫字母那個應該放到前面。
<sort../>需要在<for-each.../>或<apply-templates.../>中使用,一次可使用多個<order../>元素,第一個<order.../>的優先級別最高,之後優先級別依次降低。
控制空白的處理方式
<preserve-space.../>:保留空白。
<strip-space.../>:刪除空白;
這兩個元素都是根元素的子元素,使用時需指定elements屬性的屬性值,該屬性是以一個token類型的屬性,可接受多個元素名或通配符“*”,用於控制這些元素的空白。
<!-- Category: top-level-element -->
<xsl:strip-space
elements = tokens />
<!-- Category: top-level-element -->
<xsl:preserve-space
elements = tokens />