4

を使用してXSLT 1.0

<xsl:for-each select="*">
    <xsl:variable name="xxxx" select="@name" />
    <xsl:if test="../../../../fieldMap/field[@name=$xxxx]">...
        <xsl:if test="position() != last()">////this is not work correctly as last() number is actual last value of for loop and position() is based on if condition.
            <xsl:text>,</xsl:text>
        </xsl:if>
    </xsl:if>
</xsl:for-each>

,ここで最後の「」を削除する方法を教えてください。

4

3 に答える 3

1

if内部を次のように変更できます。

    <xsl:if test="not(following-sibling::*[
                   @name = ../../../../fieldMap/field/@name])">
        <xsl:text>,</xsl:text>
    </xsl:if>

ところで、これは「一般的な比較」のために機能します。いえ

A = B

A によって選択されたいずれかのノードが、B によって選択されたいずれかのノードと等しい (同じ値を持っている) 場合、真です。

DRYのために、おそらく変数に入れて、ループが始まる../../../../fieldMap/field/@name前に宣言します。for-each

<xsl:variable name="fieldNames" select="../../../../fieldMap/field/@name" />
<xsl:for-each select="*">
    <xsl:if test="$fieldNames = @name">...
        <xsl:if test="not(following-sibling::*[@name = $fieldNames])">
            <xsl:text>,</xsl:text>
        </xsl:if>
    </xsl:if>
</xsl:for-each>

繰り返しになりますが、$fieldNames は複数の属性ノードのノードセットにすることが$fieldNames = @nameでき@nameます$fieldNames

于 2013-06-13T20:08:02.637 に答える