在XSLT中递归调用函数



下面的代码以V4格式返回UUID,即总共36个字符的8-4-4-4-12。我正在使用https://stackoverflow.com/a/60074845/3747770以生成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有时会返回35个字符,而不是36个字符,我无法重现此问题。因此,我计划递归调用Utility:UUID4函数,直到它返回36个字符。如何递归调用函数Utility:UUID4,直到它在XSLT1.0中返回36个字符?或者,有没有办法解决这个问题?

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

为了回答您的问题:您可以递归地调用调用函数,直到被调用的函数返回令人满意的结果:

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

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

最新更新