2012-11-19 65 views
0

我要添加 ',' 只有當的需要如何在循環(xsl)中獲取當前變量值?

我檢查<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> 

回答

2

你確實是試圖用一個變量已經聲明之前。您在變量聲明的主體中指的是$ myVar$ myVar的實際上不會宣佈直到最終收盤後的xsl:變量

在這種情況下,你需要解決你的問題是什麼是利用位置功能,以確定是否被定位在第一個UPCPackagingLevelCode元素。

所以,與其這樣....

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

操作方法......

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

事實上,你可以稍微地簡化這一點,使用XSL:如果代替的xsl:選擇

<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> 
+0

太棒了!感謝XSLT 2解決方案! – VextoR

相關問題