2012年7月19日 星期四

xsl 副程式分享, 產生N個tab

假設有一個系統, 允許使用者勾選要顯示的欄位如下圖所示:

產生出來的 HTML 表格如下:

html 的 table 可以使用 colspan=N 來控制合併儲存格的數量, 如果想使用 xsl 產生 .csv 的檔案出來,  要怎麼產生出對應該的儲存格間距呢?  我的解法是透過 xsl 的副程式來解決, 計算儲存格間距的問題.


步驟1: 第1層要增加的tab 數(level1tabs) 
= (第3層的數量 x 第2層的數量) - 1 
= (2 x 3) -1 
= 5

<xsl:variable name="level1tabs"><xsl:value-of select="($level3count*$fieldCount)-1"/></xsl:variable>


步驟2: 呼叫副程式, 並傳入變數5
<xsl:call-template name="outputTabs"><xsl:with-param name="maxNum"><xsl:value-of select="$level1tabs"/></xsl:with-param></xsl:call-template>


步驟3: 被呼叫的副程式如下:
<xsl:template name="outputTabs">
<xsl:param name="currentNum">1</xsl:param>
<xsl:param name="maxNum"/><![CDATA["" ]]><xsl:if test="$maxNum!=''"><xsl:if test="$currentNum &lt; $maxNum"><xsl:call-template name="outputTabs">
<xsl:with-param name="currentNum"><xsl:value-of select="$currentNum + 1" /></xsl:with-param>
<xsl:with-param name="maxNum"><xsl:value-of select="$maxNum" /></xsl:with-param>
</xsl:call-template></xsl:if></xsl:if></xsl:template>


update: 2012-08-22, 副程式升級, 可以自行定義要輸出的符號.

沒有留言:

張貼留言

Facebook 留言板