我有一个XSLT模板,它定义了一个像这样的参数:
<xsl:param name="weight"/>
我称之为:
<xsl:call-template name="MakeBlock">
<xsl:with-param name="weight" select="normal"/>
[...]
在我的模板中,我尝试使用$weight
参数,如下所示:
<xsl:attribute name="font-weight">
<xsl:copy-of select="$weight"/>
</xsl:attribute>
我也试过这个:
<fo:block font-weight="$weight"/>
在这两种情况下,它都不会渲染输出。
当我在Visual Studio中调试并在断点处停止时,显示$weight
参数的值,我将其作为其值:
{Dimension:[0]}
我对此的理解是该参数是某种节点集。所以,我试过这个“得到”它的价值:
exsl:node-set($weight)/
我谷歌搜索了很多,发现了一些例子告诉我应该工作。是的,我已经像这样处理了命名空间:
<xsl:stylesheet xmlns:exsl="http://exslt.org/common" extension-element-prefixes="exsl" [other stuff...] />
如何在模板中使用此参数? (我在C#中使用默认的XSLT 1.0转换,如果这很重要。)
修改
以下是完整的模板:
<xsl:template name="MakeBlock">
<xsl:param name="font-size"/>
<xsl:param name="font-family"/>
<xsl:param name="weight"/>
<xsl:param name="space-after"/>
<xsl:param name="content"/>
<fo:block font-weight="{$weight}" font-size="{$font-size}pt" font-family="{$font-family}" space-after="{$space-after}pt">
<xsl:value-of select="$content"/>
</fo:block>
</xsl:template>
以下是它的名称:
<xsl:template match="p">
<xsl:call-template name="MakeBlock">
<xsl:with-param name="font-size" select="11"/>
<xsl:with-param name="font-family">PT Sans</xsl:with-param>
<xsl:with-param name="weight" select="normal"/>
<xsl:with-param name="space-after" select="11"/>
<xsl:with-param name="content">
<xsl:value-of select="."/>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
请注意,space-after
和font-size
参数工作正常,但font-weight
和font-family
参数都存在上述问题。我猜它与如何处理字符串参数与数字参数有关?
答案 0 :(得分:0)
如果要传递文字字符串值,则需要<xsl:with-param name="weight" select="'normal'"/>
。