在XSLT中处理多个节点时删除多余的空间

时间:2015-01-09 10:24:27

标签: xslt

我有几个节点禁止跟踪数据,我想将它们连接在一个字符串中,成为一个新的变量$tracks

    <xsl:template match="tracks">
        <xsl:variable name="trackArtist">
            <xsl:apply-templates select="/artists/item/@artist" />
        </xsl:variable>
        <xsl:value-of select="item/concat(@unit, '|', @track, '|null|', @text, '|', $trackArtist, '|null|null|')" />
    </xsl:template>

所以这是有效的,它将它们连接起来。但是我在节点的每一端都有一个空格,我尝试了很多事情normalize-spacestring-join等等。但后来我发现额外的空间只是由处理过的每个节点生成的。

<tracks>
    <item text="SILENCE" track="1" unit="1"/>
    <item text="HAPPINESS" track="2" unit="1"/>
    <item text="DREAM" track="3" unit="1"/>
</tracks>

结果(注意'| null | null |'后面的空格:

1|1|null|SILENCE|FOURPLAY|null|null| 1|2|null|HAPPINESS|FOURPLAY|null|null| 1|3|null|DREAM|FOURPLAY|null|null|

如何连接节点中的数据加上所有其他节点?

1 个答案:

答案 0 :(得分:0)

好的,在同事的帮助下弄清楚了。

由于它是您正在编辑的节点列表,因此它将应用标准的内置处理方式,从而在每个节点之后添加一个空格。因此,通过添加string-join(),您可以操纵它。这也解决了有一个尾随(不必要的)管道的问题。

<xsl:value-of select="string-join(item/concat(@unit, '|', @track, '|null|', @text, '|', $trackArtist, '|null|null'), '|')" />