如何在XSLT模板参数中获取属性值?

时间:2016-08-29 15:52:59

标签: xslt xpath apply-templates

我正在调用apply-templates,如下所示:

<xsl:apply-templates>
    <xsl:with-param name="pWeight" select="@layoutWeight * $pContentWidth" />
</xsl:apply-templates>

我正在尝试访问apply-templates正在对其执行的子元素的layoutWeight属性值。但是,计算始终评估为空,即使子项具有layoutWeight的数值,pContentWidth也是数值。

如何访问子元素apply-templates的layoutWeight属性?

1 个答案:

答案 0 :(得分:1)

select上的with-param属性是相对于周围上下文进行评估的,而不是相对于应用模板的每个节点。完成您要做的事情的一种方法是将apply-templates包裹在for-each中:

<xsl:for-each select="node()">
  <xsl:apply-templates select=".">
    <xsl:with-param name="pWeight" select="@layoutWeight * $pContentWidth" />
  </xsl:apply-templates>
</xsl:for-each>

另一种选择是将$pContentWidth参数传递给apply-templates,让模板自己访问@layoutWidth并执行计算。