处理XSL中的字符串中的整数

时间:2010-05-03 17:02:21

标签: xslt

我有一个存储的时间值,格式为H:mm:ss。小时数可以是从0到几天的任何值。此数据在XML标记中发送,并由XSL处理以显示。我想要的显示格式为:

D days, HH:mm:ss (hours/minutes)

如果HH大于0,则最后一个标签显示小时数,如果小于0则显示小时数。

考虑到最初的HH,可能超过24,我知道我需要HH / 24的最低价来获得天数值。然后原来的HH%24给了我剩下的时间。

我还使用xsl:whenxsl:if来处理分钟和小时问题。

我从小时的价值中得到了日子和时间。

修改 到目前为止,我正在考虑做以下事情:

变量声明

<xsl:variable name="time"><xsl:value-of select="time" /><xsl:variable>
<xsl:variable name="days"><xsl:value-of select="floor(substring-before(time, ':') / 24)" /></xsl:variable>
<xsl:variable name="hours"><xsl:value-of select="substring-before(time, ':') mod 24" /></xsl:variable>
<xsl:variable name="minutes"><xsl:value-of select="substring-after(time, ':')" /></xsl:variable>

使用

<xsl:if test="$days > 0">
    <xsl:value-of select="$days" /> days
</xsl:if>
<xsl:value-of select="$hours" />:<xsl:value-of select="$minutes" />

<xsl:choose>
    <xsl:when test="$hours > 0">
        hour<xsl:if test="$hours > 1">s</xsl:if>
    </xsl:when>
    <xsl:otherwise>
       minute<xsl:if test="$minute != '01:00'">s</xsl:if>
    </xsl:otherwise>
 </xsl:choose>

澄清一下,样本时间为<time>26:15:00</time> 1天2:15小时。

1 个答案:

答案 0 :(得分:0)

以下是我原始尝试工作所需的修改。我需要记住变量的美元符号。我需要使用div而不是/。最重要的是,我需要表达式number来将子字符串转换为数字。这就是我想出来的。我欢迎评论,这将改善我的XSLT!

<xsl:variable name="time"><xsl:value-of select="time" /><xsl:variable>
<xsl:variable name="totalHours><xsl:value-of select="number(substring-before($time, ':'))" /></xsl:variable>
<xsl:variable name="days"><xsl:value-of select="floor($totalHours div 24)" /></xsl:variable>
<xsl:variable name="hours"><xsl:value-of select="$totalHours mod 24" /></xsl:variable>
<xsl:variable name="minutes"><xsl:value-of select="substring-after(time, ':')" /></xsl:variable>