0

XSLT で変数への基本的な再割り当てを実行できるようにしたいと考えています。これはどのように達成できますか?

これを XSLT に変換できるようにしたいだけです (appendMonthWithZero() 関数を無視します)。

if(currentMonth + count > 12) //If we get past December onto a new year we need to reset the current month back to 01
{
    currentMonth = (currentMonth + count) - 12; //e.g. 9 + 4 = 13, 13 - 12 = 1 (January). Or 9 + 11 = 20, 20 - 12 = 8 (August)
    if(currentMonth < 10)
    {
        currentMonth = appendMonthWithZero();
    }
}

これまでのところ、XSLT でこれを使用していますが、機能しません。私はこれを12回ループしているのでcurrentMonth、他の変数の間で変更を続けたいと思っています:

<xsl:if test="$currentMonth + $count &gt; 12">
    <xsl:param name="currentMonth" select="($currentMonth + $count) - 12"/>
</xsl:if>

これは基本的に、疑似コードで全体的にやろうとしていることです( http://pastebin.com/WsaZaKnC ):

currentMonth = getCurrentMonth();
actualDateWithZero = appendMonthWithZero();
docs = getFlightResults();
monthsArray = ['Jan', 'Feb', 'Mar'.......];

for(count = 0; count < 12; count++)
{   
    outboundMonth = subString(doc[count+1].getOutboundMonth());

    if(currentMonth + count > 12) //If we get past December onto a new year we need to reset the current month back to 01
    {
        currentMonth = (currentMonth + count) - 12; //e.g. 9 + 4 = 13, 13 - 12 = 1 (January). Or 9 + 11 = 20, 20 - 12 = 8 (August)
        if(currentMonth < 10)
        {
            currentMonth = appendMonthWithZero();
        }
    }

    //A price is available. 
    //Second check is for when we get past a new year
    if(currentMonth + count == outboundBoundMonth || currentMonth == outboundMonth)
    {
        //Get rest of data from doc etc etc
        //Set up divs etc etc
        //Get string month with displayed Month [Jan, Feb, Mar....]
    }

    //Else no price available for this month
    else
    {       
        //display price not available
        //Get string month with displayed Month [Jan, Feb, Mar....]
    }
}
4

2 に答える 2

2

XSLT は宣言型言語であり、ステートフル変数を使用しません。コンピューターに低レベルの手続き命令を与える方法を考えるのではなく、出力を入力の関数として表現する方法を考え出す必要があります。

あなたの場合、それは非常に簡単に思えます。異なる変数を使用するだけです:

if(currentMonth + count > 12) {
    m2 = (currentMonth + count) - 12; 
    if (m2 < 10) then appendMonthWithZero(m2) else m2;
} else {
    currentMonth
}
于 2013-09-05T13:47:36.270 に答える