Xslt 1.0 在XSLT1.0中如何将数字相乘

Xslt 1.0 在XSLT1.0中如何将数字相乘,xslt-1.0,Xslt 1.0,我有一个数字,比如123,它存储在一个元素中 123。我正在寻找一个用XSLT1.0编写的解决方案,它可以执行如下操作:1*2*3,并将结果作为6提供给我。Number元素中的值可以是任意长度。我知道我可以通过子字符串函数和将值逐个存储在变量中来实现这一点,但问题是,我不知道这个字段的长度 我无法为此编写任何xslt 有人能为这一问题提供帮助或建议解决方案吗?您可以通过调用递归命名模板来实现这一点: <xsl:template name="digit-product"> &l

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

我无法为此编写任何xslt


有人能为这一问题提供帮助或建议解决方案吗?

您可以通过调用递归命名模板来实现这一点:

<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>

工作示例:

请注意,这假定传递的digits参数的值为整数