如何在循环(xsl)中获取当前变量值?

时间:2012-11-19 09:42:51

标签: xml xslt

我想仅在需要时添加“,

我检查<xsl:when test="$myvar!=''">所以它不会像:

,one,two,three

但是会 而是one,two,three

但它说

  

尚未声明变量$ myvar;

<xsl:variable name="myvar">
    <xsl:for-each select="$header/Packaging[@type='european']/UPCPackagingLevelCode">
        <xsl:choose>
            <xsl:when test="$myvar!=''">
                <xsl:value-of select="concat(',',.)"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="."/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:for-each>
</xsl:variable>

1 个答案:

答案 0 :(得分:2)

您确实在声明变量之前尝试使用变量。您在变量声明的主体中引用 $ myVar $ myVar 直到最后结束 xsl:variable

之后才会实际宣布

在这种情况下,您需要解决的问题是使用位置函数来确定您是否位于第一个 UPCPackagingLevelCode 元素上。

所以,而不是这样做....

<xsl:when test="$myvar!=''">

这样做......

<xsl:when test="position() > 1">

事实上,您可以稍微简化一下,使用 xsl:if 代替 xsl:choose

<xsl:if test="position() > 1">
    <xsl:text>,</xsl:text>
</xsl:if>
<xsl:value-of select="." />

如果你使用的是XSLT2.0,你可以将整个过程简化为

<xsl:variable name="myvar">
   <xsl:value-of select="$header/Packaging[@type='european']/UPCPackagingLevelCode"
       separator="," />
</xsl:variable>