我正在創建xsl-fo到rtf樣式表。我遇到的一個問題是將xsl-fo文檔中的多個度量單位轉換爲緹(rtf度量單位)。xsl轉換/翻譯模板
一個特定的代碼片caluclates的列的寬度:
<xsl:value-of select="sum(preceding-sibling:
:fo:table-column/@column-width) + @column-width"/>
...問題是的/@column-width
的值可以是從1in
(1英寸)什麼20px
(20個像素),因此,當我做它會失敗的總和。
我需要以某種方式轉換@column-width
以緹equivelant: 1pt = 19.95 twips, 1px = 15 twips, 1pc = 240 twips, 1in = 1440 twips, 1cm = 567 twips, 1mm = 56.7 twips, 1em = 240 twips
我大概可以寫,可以做轉換的方法,但我相信有一些方法來利用translate()
功能做這更有效。
請大家注意,我的XSL是不是所有的大,所以如何實現這樣的一個例子可以理解
編輯
我設法找到了我想要的東西,但不知道如何調用從上述計算這個模板:
<xsl:template match="@*" mode="convert-to-twips">
<xsl:variable name="scaling-factor">
<xsl:choose>
<xsl:when test="contains (., 'pt')">19.95</xsl:when>
<xsl:when test="contains (., 'px')">15</xsl:when>
<xsl:when test="contains (., 'pc')">240</xsl:when>
<xsl:when test="contains (., 'in')">1440</xsl:when>
<xsl:when test="contains (., 'cm')">567</xsl:when>
<xsl:when test="contains (., 'mm')">56.7</xsl:when>
<xsl:when test="contains (., 'em')">240</xsl:when>
<!-- guess: 1em = 12pt -->
<xsl:otherwise>1</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="numeric-value"
select="translate (., '-.ptxcinme', '-.')"/>
<xsl:value-of select="$numeric-value * $scaling-factor"/>
</xsl:template>
好問題,+1。查看我的答案,獲得完整而簡單的解決方案。 – 2011-05-21 22:11:44
是的,這是一個*完整的解決方案 - 不僅僅是僞代碼。 – 2011-05-22 00:09:15
我的答案只是一個例子,說明如何使用模板規則來使用'xsl:call-template'。你如何使用'translate'也有一點小錯誤。看到我的答案,希望它有幫助。 – 2011-05-22 09:28:10