Обработка целого числа, скрытого в строке, в XSL

У меня есть сохраненное значение времени в формате H:mm:ss. Часы могут быть любым значением от 0 до нескольких дней. Эти данные отправляются в теге XML и обрабатываются XSL для отображения. Дисплей, который я хочу, имеет формат:

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

Где последний тег показывает часы, если HH больше 0, минуты, если он равен 0.

Учитывая исходное ЧЧ, которое может быть больше 24, я знаю, что мне нужен пол ЧЧ / 24, чтобы получить значение дней. Затем исходный HH % 24 дает мне оставшиеся часы.

Я также обработал вопрос минут и часов, используя xsl:when и xsl: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 часа.


person justkt    schedule 03.05.2010    source источник
comment
В чем собственно вопрос? У вас есть образец кода, который показывает, что вы сейчас пытаетесь сделать?   -  person IAbstract    schedule 03.05.2010
comment
@dboarman-FissureStudios - я обновил код и, надеюсь, немного прояснил свой вопрос. Что мне нужно сделать, так это выяснить, как получить дни в формате часов, минут и секунд и преобразовать их в красивую строку.   -  person justkt    schedule 03.05.2010


Ответы (1)


Вот изменения, которые мне понадобились, чтобы моя первоначальная попытка заработала. Мне нужно было запомнить знаки доллара для переменных. Мне нужно было использовать 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>
person Community    schedule 03.05.2010