1

tmp_balance_virtループ内でグローバル変数をインクリメントしたいのですfor-eachが、各ループtmp_balance_virt(a= a +b) で初期値にリセットされます。どうすれば機能しますか?

<xsl:variable name="tmp_balance_virt" select="/doc/plot/@st_balance_virt" /> //first value  
...
<xsl:if ...>
...
<xsl:for-each
    select="/doc/plot/cfc/pl.cashflow.rabean.TransactionsData[type=0]">
                <xsl:variable name="tmp_balance_virt" select="value + $tmp_balance_virt" />
                [
                <xsl:value-of select="date_ms" />
                ,
                <xsl:value-of select="$tmp_balance_virt" />
                ],
</xsl:for-each>

編集:それが私にとってうまくいくものです。

        <xsl:for-each
            select="/doc/plot/cfc/pl.cashflow.rabean.TransactionsData[type=1]">
            <xsl:variable name="PREC"
                select="count(preceding-sibling::pl.cashflow.rabean.TransactionsData[type=1])+2" />
            [
            <xsl:value-of select="date_ms" />
            ,
            <xsl:value-of
                select="sum(/doc/plot/cfc/pl.cashflow.rabean.TransactionsData[type=1][position() &lt; $PREC]/value) + $tmp_balance_real" />
            ],
        </xsl:for-each>
4

2 に答える 2

1

これに対する答えがここにあります:

XSLTで、別のスコープからグローバル変数をインクリメントするにはどうすればよいですか?

正確にはあなたが求めているものではありませんが、それはあなたを助けるべきいくつかの良い提案を持っています

于 2012-07-25T14:46:49.740 に答える
1

XSLT は関数型言語です。つまり、変数は不変です。一度設定すると、変更できません。これは、アプローチを変更し、より機能的な方法で考える必要があることを意味します。

この場合、おそらくsum関数を利用して、変数を初期化するために次のようなことを行うことができます。

<xsl:variable 
   name="tmp_balance_virt" 
   select="/doc/plot/@st_balance_virt
     + sum(/doc/plot/cfc/pl.cashflow.rabean.TransactionsData[type=0]/value)" />
于 2012-07-25T15:23:42.833 に答える