额外空间来自哪里? (XSLT)

时间:2016-01-16 02:15:59

标签: xml xslt

我正在使用XSLT生成超链接,并且我在链接的单词的末尾不断获得额外的空格。

我的XML看起来像这样:

The last word needs to be a <url id="1">link</url>.

使用@id连接链接。这是我的XSLT:

<xsl:template match="//url">
    <a href="../mainsite.html{@id}"><xsl:copy-of select="."/></a>
</xsl:template>

出于某种原因,这会在“链接”一词上生成一个链接,但它会在其后面添加一个空格,即使网址标记之间没有空格。

如果我为普通字符串切换xsl:copy-of,问题就会消失。例如:

<xsl:template match="//url">
    <a href="../mainsite.html{@id}">string</a>
</xsl:template>

地球上有多余的空间来自哪里?它让我很生气,因为标点符号后面的任何链接看起来都很棘手。我应该在哪里寻找追踪问题的方法?

非常感谢能够提供帮助的任何人。

3 个答案:

答案 0 :(得分:3)

normalize-space属性将删除前导和尾随空格。

<xsl:value-of select="normalize-space(.)"/>

答案 1 :(得分:2)

可能是在值的末尾添加换行符。 xsl:copy-of的正常行为是添加一个结束行中断,它可以将自身显示为一个额外的空格。

答案 2 :(得分:1)

<xsl:template match="//url">
    <a href="../mainsite.html{@id}"><xsl:copy-of select="."/></a>
</xsl:template>
     

出于某种原因,这会在单词&#39; link&#39;上生成一个链接,但它会添加   它之后的空间

问题在于你正在使用:

<xsl:copy-of select="."/>

你应该使用的地方:

<xsl:value-of select="."/> 

由于你的样式表显然设置为缩进输出,你最终得到:

The last word needs to be a <a href="../mainsite.html1">
      <url id="1">link</url>
   </a>

然后,浏览器会忽略非HTML标记,并将换行符渲染为空格。