我有一个奇怪的要求。
我在xslt中有一个包含月份的变量,其id(1-12)
问题是我需要全部显示它们,但从1月(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>
但它需要两个for-each语句,并且在一些地方需要这个for-each。有没有更简洁的方法来写这个,所以它是一个循环?
答案 0 :(得分:3)
如何使用模运算?
<xsl:sort data-type="number" select="(number(@ID)+12-$startAtMonth) mod 12"/>