在 XSLT 中递归调用函数

Calling a function recursively in XSLT

以下代码 returns UUID 采用 V4 格式,即 8-4-4-4-12 总共 36 个字符。我正在使用 生成 UUID。

<func:function name="Utility:getFormatedV4Uuid">
    <func:result>
        <xsl:text>uuid.</xsl:text>
        <xsl:value-of select="Utility:UUID4()"/>
    </func:result>
</func:function>

但问题是函数 Utility:UUID4 有时 returns 35 个字符而不是 36 个字符,我无法重现该问题。 所以我打算递归调用 Utility:UUID4 函数直到它 returns 36 个字符。 如何在 XSLT 1.0 中递归调用函数 Utility:UUID4 直到它 returns 36 个字符? 或者,有没有办法解决这个问题?

正如我在评论中所说,我不知道如何重现该问题。

回答你的问题:你可以递归调用调用函数,直到被调用函数returns得到一个满意的结果:

<func:function name="Utility:getFormatedV4Uuid">
    <xsl:variable name="uid" select="Utility:UUID4()"/>
    <func:result>
        <xsl:choose>
            <xsl:when test="string-length($uid) = 36">
                <xsl:text>uuid.</xsl:text>
                <xsl:value-of select="$uid"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="Utility:getFormatedV4Uuid()"/>
            </xsl:otherwise>
        </xsl:choose>
    </func:result>
</func:function>

未经测试,因为我不知道如何在无法重现问题的情况下进行测试。