下面的代码以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>
未测试,因为我不知道如何在不重现问题的情况下进行测试。