0

Google api でグラフ化する一連のデータを準備しています。データはこのようにフォーマットする必要があります。

すなわち。

1,2,3|1,2,3|1,2,3

今、私の出力は次のように出続けます:

1,2,3|1,2,3|1,2,3|

最後のセパレーターを削除しようとしているか、そこにまったくありません。コードがどのように見えるかの例を次に示します。

        <xsl:for-each select="$doc//names[text()=$name]/..//loc">
        <xsl:value-of select="100- . +1"/>
        <xsl:if test="not(position() = last())" >
            <xsl:value-of select="','"/>
        </xsl:if>
        <xsl:if test="position()= last() " >
            <xsl:value-of select="'|'"/>
        </xsl:if>
            </xsl:for-each>

また

        <xsl:for-each select="$doc//names[text()=$name]/..//loc">
        <xsl:value-of select="100- . +1"/>
        <xsl:choose>
        <xsl:when test="not(position() = last())" >,</xsl:when>
        <xsl:otherwise>|</xsl:otherwise>
        </xsl:choose>

concat または strip 、 split 、または mod の方法はありますか。参加、トークン化?

ありがとう!

4

1 に答える 1

1

あなたが私たちに見せてくれた XSLT スニペットを見ると、あなたが私たちに見せてくれた|複数回ではなく、一度だけ文字を出力すると思います。

たとえば、コードサンプルが別のxsl:for-eachにあるか、xsl:template match="..."内にある可能性があり、複数回呼び出されている可能性があります。

この場合、パイプ文字の出力を、表示した内側のループの外に移動する必要があるだけかもしれません。

<xsl:for-each select="$doc//names[text()=$name]/..//loc">
    <xsl:value-of select="100- . +1"/>
    <xsl:if test="not(position() = last())" >
        <xsl:value-of select="','"/>
    </xsl:if>
</xsl:for-each>
<xsl:if test="position()= last() " >
    <xsl:value-of select="'|'"/>
</xsl:if>

(余談ですが、<xsl:value-of select="100- . +1"/>「NaN」を出力するだけなので、何をしているのかわかりません)

別の、より大まかな解決策は、現在のコードを変数内に配置し、変数を出力することです

<xsl:variable name="data">
    <xsl:for-each select="$doc//names[text()=$name]/..//loc">
        <!-- Existing code -->
    </xsl:for-each>
</xsl:variable>
<xsl:value-of select="substring($data, 1, string-length($data) - 1" />
于 2013-06-13T22:32:49.227 に答える