【问题标题】:xsl variable defined twice with samexsl 变量用相同的方式定义了两次
【发布时间】:2022-07-05 16:57:50
【问题描述】:

我正在尝试生成一个三位数的计数器,例如 001、002 .... 我已经声明了两个具有相同名称的计数器变量,它可以工作吗? 我已经定义了一个全局变量和一个循环内用于递增计数器的变量,它会生成正确的值吗? 这是我的代码

  <xsl:template match="/">
     <xsl:variable name="counter" select="001"/>
            <xsl:for-each select="ns0:Notes/ns0:Note">
                        <ORDER_LINE_NOTE_SEG>
                           <NOTLIN>
                           <xsl:value-of select="$counter"/>
                           </NOTLIN>
                        </ORDER_LINE_NOTE_SEG>
                        <xsl:variable name="counter" select="number(counter)+1"/>
            </xsl:for-each>
  </xsl:template>

需要的输出

                        <ORDER_LINE_NOTE_SEG>
                           <NOTLIN>001</NOTLIN>
                        </ORDER_LINE_NOTE_SEG>
                        <ORDER_LINE_NOTE_SEG>
                           <NOTLIN>002</NOTLIN>
                        </ORDER_LINE_NOTE_SEG>
                        <ORDER_LINE_NOTE_SEG>
                           <NOTLIN>003</NOTLIN>
                        </ORDER_LINE_NOTE_SEG>

【问题讨论】:

  • 请发布一个 [mcve[ 显示输入、您当前的 XSLT 和预期的输出。还将代码减少到演示问题所需的最低限度。
  • @michael.hor257k 我已经编辑了我的问题。将代码减少到最少,并添加了所需的输出。

标签: xml xslt soa jdeveloper


【解决方案1】:

在 XSLT 中引用变量时,您必须在其前面加上 $,但这不是主要问题,您不能在 XSLT 中这样做:

<xsl:variable name="$counter" select="number($counter)+1"/>

XSLT 中的变量是不可变的。您不能为变量重新分配新值。

但是在您的xsl:for-each 语句中,您可以使用position() 函数引用当前ns0:Note 元素在序列中的位置,该函数将为第一个ns0:Note2 返回1第二个,等等。

【讨论】:

    猜你喜欢
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    相关资源
    最近更新 更多