在 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>
未经测试,因为我不知道如何在无法重现问题的情况下进行测试。
以下代码 returns UUID
采用 V4 格式,即 8-4-4-4-12
总共 36
个字符。我正在使用
<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>
未经测试,因为我不知道如何在无法重现问题的情况下进行测试。