问题描述:
我遇到XSL以下问题,当每个换的xsl:</p> <p>我有以下现有所使用的其他XSL文件模板:期待只有一个节点
<xsl:template name="strength">
<xsl:call-template name="show-strength">
<xsl:with-param name="medStrengthUnit1"
select="epsos:numerator/@unit"/>
<xsl:with-param name="medStrengthUnit2"
select="epsos:denominator/@unit"/>
<xsl:with-param name="medStrengthValue1"
select="translate(epsos:numerator/@value, '.', ',')"/>
<xsl:with-param name="medStrengthValue2"
select="translate(epsos:denominator/@value, '.', ',')"/>
<xsl:with-param name="medStrength1"
select="epsos:numerator"/>
<xsl:with-param name="medStrength2"
select="epsos:denominator"/>
</xsl:call-template>
</xsl:template>
现在我希望让此模板,但我没有一个参数添加到方法(因为它被其它样式表)
对于现在的可能性,我用下面的电话:
<xsl:for-each select="$strength">
<xsl:call-template name="strength"/>
</xsl:for-each>
与实力是一个PARAM从其他方法传递:
<xsl:with-param name="strength"
select="epsos:quantity"/>
这是工作,但我知道只有一种力量,我不喜欢它使用的xsl:for-如果每我知道已经有一定的力量。
有没有办法只是呼吁路径模板,如:
//for ($strength)
<xsl:call-template name="strength"/>
答
您可以更改模板接受一个参数,而不是要求方面要设定的项目。但你不想这样做。
您可以通过调用xsl:for-each来设置上下文项目。但你不想这样做。
您可以将代码复制并粘贴到不需要设置上下文项目的重构模板(或函数)中。但你不想这样做。
因此,看起来你将不得不做一些你不想做的事情。欢迎来编程。
听起来像你需要并且想要将上下文节点改变为你的'$ strength'变量,因为你需要'for-each'或'apply-templates'。 –
你确定你不能改变“强度”模板吗?一种可能性是给它一个默认参数,比如' ' –
另一种可能性是用' ... xsl:template>添加一个匹配属性到模板,然后你可以使用' '而不是'for-each/call-template'。您需要根据您要使用该模板的元素类型来调整“匹配”。 –