在XSLT中,如何在模板中获取nodeset参数的值?

时间:2015-03-10 14:45:06

标签: xslt

我有一个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-afterfont-size参数工作正常,但font-weightfont-family参数都存在上述问题。我猜它与如何处理字符串参数与数字参数有关?

1 个答案:

答案 0 :(得分:0)

如果要传递文字字符串值,则需要<xsl:with-param name="weight" select="'normal'"/>