在 XSLT 中处理多个节点时删除额外的 space

Remove extra space when handling multiple nodes in 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>

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

<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|'后面的space:

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

如何连接来自一个节点和所有其他节点的数据?

好的,在同事的帮助下弄明白了。

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

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