我想仅在需要时添加“,
”
我检查<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>
答案 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>