【问题标题】:How to add a global variable to itself (a=a+b) in xsl如何在xsl中将全局变量添加到自身(a = a + b)
【发布时间】:2012-07-24 00:48:49
【问题描述】:

我想在for-each 循环中增加我的全局变量tmp_balance_virt 但在每个循环中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>

【问题讨论】:

  • 尝试在 a+b 周围添加括号:a=(a+b)
  • 这是 XSLT 1 还是 2?您不能在 1 中重新定义(因此增加)变量(不确定 2)。

标签: xslt


【解决方案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)" />

【讨论】:

    【解决方案2】:

    这里有一个答案:

    In XSLT how do I increment a global variable from a different scope?

    不完全是你所追求的,但它有一些很好的建议可以帮助你

    【讨论】:

      猜你喜欢
      • 2017-06-22
      • 2019-01-27
      • 2015-01-31
      • 1970-01-01
      • 2011-10-19
      • 2018-08-17
      • 1970-01-01
      • 2021-06-28
      • 2016-01-31
      相关资源
      最近更新 更多