xsl:for-each只期望一个节点

时间:2017-10-13 15:25:03

标签: xml xslt xslt-2.0

我遇到xsl的以下问题:

我遵循其他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>

强度是从另一种方法传入的参数:

<xsl:with-param name="strength"
                select="epsos:quantity"/>

这是有效的,但我知道只有一种力量,我不喜欢使用xsl:for-each如果我知道已经必须总是有一个力量。

有没有办法只为路径调用模板,例如:

//for ($strength)
<xsl:call-template name="strength"/>

1 个答案:

答案 0 :(得分:0)

您可以更改模板以接受参数,而不是要求设置上下文项。但你不想这样做。

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

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

所以看起来你将不得不做一些你不想做的事情。欢迎来到编程。