2017-10-13 74 views
0

我遇到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"/> 
+2

听起来像你需要并且想要将上下文节点改变为你的'$ strength'变量,因为你需要'for-each'或'apply-templates'。 –

+1

你确定你不能改变“强度”模板吗?一种可能性是给它一个默认参数,比如'' –

+1

另一种可能性是用' ...添加一个匹配属性到模板,然后你可以使用''而不是'for-each/call-template'。您需要根据您要使用该模板的元素类型来调整“匹配”。 –

回答

0

您可以更改模板接受一个参数,而不是要求方面要设定的项目。但你不想这样做。

您可以通过调用xsl:for-each来设置上下文项目。但你不想这样做。

您可以将代码复制并粘贴到不需要设置上下文项目的重构模板(或函数)中。但你不想这样做。

因此,看起来你将不得不做一些你不想做的事情。欢迎来编程。

相关问题