如何在xslt 1.0中相互增加数字

时间:2015-10-12 06:32:07

标签: xslt-1.0

我有一个例如123的数字,这个存储在一个元素中 <Number>123</Number>。我正在寻找一个用XSLT 1.0编写的解决方案,它可以执行类似的操作:1 * 2 * 3并将结果提供给6. Number元素中的值可以是任意长度。我知道我可以通过子串函数和逐个存储变量值来实现这个,但问题是,我不知道这个字段的长度。

我无法为此写任何xslt。

任何人都可以为此提供帮助或建议解决方案吗?

1 个答案:

答案 0 :(得分:0)

您可以通过调用递归命名模板来执行此操作:

<xsl:template name="digit-product">
    <xsl:param name="digits"/>
    <xsl:param name="prev-product" select="1"/>
    <xsl:variable name="product" select="$prev-product * substring($digits, 1, 1)" />
    <xsl:choose>
        <xsl:when test="string-length($digits) > 1">
            <!-- recursive call -->
            <xsl:call-template name="digit-product">
                <xsl:with-param name="digits" select="substring($digits, 2)"/>
                <xsl:with-param name="prev-product" select="$product"/>
            </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="$product"/>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

工作示例:http://xsltransform.net/3NJ38YJ

请注意,这假设传递的 digits 参数的值是一个整数。