XSLT逻辑覆盖临时变量

XSLT逻辑覆盖临时变量,xslt,Xslt,我们如何实现以下逻辑 UniqueID是临时变量。托盘编号来自输入 如果你有你的号码=那就空了 UniqueID=子字符串(托盘编号,10) 如果托盘编号=空,则 UniqueID=子字符串(纸箱编号,7) 我们可以从上面两个条件中得到UniqueID的值。这些事情发生在迭代循环中。我们如何覆盖UniqueID临时变量 因为后来有一个条件,我们需要像 <foreach> If previous UniqueID != current UniqueID then

我们如何实现以下逻辑

UniqueID是临时变量。托盘编号来自输入

如果你有你的号码=那就空了

UniqueID=子字符串(托盘编号,10)

如果托盘编号=空,则

UniqueID=子字符串(纸箱编号,7)

我们可以从上面两个条件中得到UniqueID的值。这些事情发生在迭代循环中。我们如何覆盖UniqueID临时变量

因为后来有一个条件,我们需要像

<foreach>   
 If previous UniqueID != current UniqueID then

        <Some code>
        <IF>
</foreach>

如果以前的唯一ID!=现在唯一的

不能覆盖xslt中的变量


您可能需要查找xslt扩展函数来实现您的目标。

正如Treemonkey所说,不可能覆盖变量,但您可以使用递归实现您所描述的功能:

假设你有这样的东西:

<xsl:for-each select="my/node/isNamed/something" />

您可以这样做:

<xsl:variable name="items" select="my/node/isNamed/something" />
<xsl:apply-templates select="$items[1]">
  <xsl:with-param name="remainder" select="$items[position() > 1" />
</xsl:apply-templates>

<!-- Separate template -->
<xsl:template match="something">
  <xsl:param name="remainder" />
  <xsl:param name="lastId" />

  <xsl:variable name="uniqueId" select="..." />
  <!-- Contents of the xsl:for-each -->

  <xsl:apply-templates select="$remainder[1]">
    <xsl:with-param name="remainder" select="$remainder[position() > 1]" />
    <xsl:with-param name="lastId" select="$uniqueId" />
  </xsl:apply-templates>
</xsl:template>


您无法覆盖xslt中的变量。因此,如果您发布您尝试使用的xml输入/xslt以及想要的输出,我们可以提供更多帮助。xslt是一种功能性语言,而不是过程性语言,您无法像您在其他语言中使用的那样,真正从“迭代”和“变量”的角度思考问题。如果您可以编辑您的问题以包含输入和所需输出的示例,我们可以为您提供一些关于如何以更实用的方式实现映射的建议。