我正在创建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