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

How to get an attributes value within a XSLT template parameter?

我调用应用模板如下:

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

我正在尝试访问 apply-templates 作用于的子元素的 layoutWeight 属性值。但是,即使子项具有 layoutWeight 的数值并且 pContentWidth 也是一个数值,计算始终评估为空。

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

with-param 上的 select 属性是相对于周围上下文进行评估的,而不是相对于应用模板的每个节点进行评估的。完成您想要做的事情的一种方法是将 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 并执行计算。