1

,必要なときだけ''を追加したい

<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>
4

1 に答える 1

2

実際、宣言される前に変数を使用しようとしています。変数宣言の本体で$myVarを参照しています。$myVarは、最終的な終了xsl:variableの後まで実際には宣言されません

この場合、問題を解決するために必要なのは、位置関数を使用して、最初のUPCPackagingLevelCode要素に位置しているかどうかを判断することです。

だから、これをする代わりに....

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

これを行う...

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

実際、 xsl:chooseの代わりにxsl:ifを使用して、これを少し単純化できます。

<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>
于 2012-11-19T10:02:20.583 に答える