Странное требование сортировки с XSLT - PullRequest
2 голосов
/ 15 августа 2011

У меня странное требование.

У меня есть переменная в xslt, содержащая месяцы с их идентификатором (1-12)

Проблема в том, что мне нужно отобразить их все, но начиная с месяца, отличного от января (1).

В настоящее время у меня есть следующее

<xsl:variable name="months">
    <Months>
        <Month ID="1">JAN</Month>
        <Month ID="2">FEB</Month>
        <Month ID="3">MAR</Month>
        <Month ID="4">APR</Month>
        <Month ID="5">MAY</Month>
        <Month ID="6">JUN</Month>
        <Month ID="7">JUL</Month>
        <Month ID="8">AUG</Month>
        <Month ID="9">SEP</Month>
        <Month ID="10">OCT</Month>
        <Month ID="11">NOV</Month>
        <Month ID="12">DEC</Month>
    </Months>
</xsl:variable>

Затем я повторюсь с этим, чтобы я мог начать с данного месяца

<xsl:for-each select="msxsl:node-set($months)//Month[@ID >= $startAtMonth]">
    <xsl:sort data-type="number" select="@ID"/>
    <th>
        <xsl:value-of select="text()"/>
    </th>
</xsl:for-each>
<xsl:for-each select="msxsl:node-set($months)//Month[not(@ID >= $startAtMonth)]">
    <xsl:sort data-type="number" select="@ID"/>
    <th>
        <xsl:value-of select="text()"/>
    </th>
</xsl:for-each>

Но для этого требуются два утверждения для каждого, и это для каждого потребуется в нескольких местах. Есть ли более краткий способ написать это, чтобы это был один цикл?

1 Ответ

3 голосов
/ 15 августа 2011

Как насчет использования операции по модулю?

<xsl:sort data-type="number" select="(number(@ID)+12-$startAtMonth) mod 12"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...