2011-08-15 9 views
2

私は奇妙な要件があります。XSLTでの奇妙なソート要件

は、私は自分のID(1-12)

問題は、私はそれらすべてを表示する必要があると、数ヶ月を含むXSLTで変数を持っていますが、1月以外の月から始まる(1)。

現在、私は指定された月で

<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> 

を開始できるように、私は

<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> 

次それから私はこれで反復している。しかし、それは2のために、それぞれの文、およびこのFOR-が必要ですそれぞれがいくつかの場所で必要になります。これを書くより簡潔な方法があるので、それは1つのループですか?

答えて

3

モジュロ演算の使用はどうですか?

<xsl:sort data-type="number" select="(number(@ID)+12-$startAtMonth) mod 12"/> 
+0

ニース、私は似たようなものを考案しようとしていましたが、月曜日はできませんでした。 – CaffGeek