在其中一个 cmets(现在已删除的答案)中,您说您的输入如下所示:
<image>
someimage.jpg</image>
这是您的换行符的来源 - 它是节点值的一部分,因此由 XSL 处理器保留(正如您所怀疑的那样,它不是“添加”的)。
要删除空格,必须在输出之前修改节点值,最适合这种情况的是 normalize-space() 函数,因为 URL 通常不包含空格。
<td>
<img src="{normalize-space(image)}"/>
</td>
如果你有任何机会,这应该在生成输入 XML 的过程中修复,因为 XML 本身已经是错误的。如果换行符不是数据的一部分,那么它一开始就不应该存在。
与这里许多其他人的建议相反,您的 XSLT 代码布局对输出没有影响。在处理开始之前,所有空格都从 XSL 样式表中删除,因此:
<td>
<xsl:element name="img">
<xsl:attribute name="src">
<xsl:value-of select="image" />
</xsl:attribute>
</xsl:element>
</td>
虽然不必要地冗长,但等同于:
<td>
<xsl:element name="img"><xsl:attribute name="src"><xsl:value-of select="image" /></xsl:attribute>
</xsl:element>
</td>
就输出空白而言,相当于这个:
<td><img src="{image}"/></td>
但是,如果您的 XSL 代码中有杂散的文本节点,则它们周围的所有空格都会保留。这意味着你不应该这样做:
<td>
Stray Text
</td>
因为这会在输出中生成一个"\n Stray Text\n " 文本节点。更好的是:
<td>
<xsl:text>Contained Text</xsl:text>
</td>
关于:“但是为什么<xsl:strip-space> 不起作用?”我推荐阅读Pavel Minaev's answer to exactly this question。