0

我正在准备一组要在 google api 上绘制的数据,数据需要以这种方式格式化。

IE。

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 回答