如何在xslt 1.0中相互相乘

  • 本文关键字:xslt xslt-1.0
  • 更新时间 :
  • 英文 :


我有一个数字,例如123,它被存储在一个元素中<Number>123</Number>。我正在寻找一个用XSLT 1.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>

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

注意,这里假定传入的digits形参的值是一个整数。

相关内容

  • 没有找到相关文章

最新更新