如何在xslt中为具有属性的元素输出空格

时间:2010-09-27 19:37:25

标签: xml xslt whitespace xslt-1.0

我有一个xslt文件,我想输出一个锚(a)标签,其中一些属性的值取决于其他东西。因此,我使用xsl:attribute标签,在其下面选择/ if(或者反之亦然)。所以我的代码看起来像这样:

<a href="/somepage.html">
  <xsl:if test="current_page='this_page'">
   <xsl:attribute name='class'>active</xsl:attribute>
  </xsl:if>
My Page
</a>

然而,问题是,在输出html中,所有换行符/空格都在那里,最终使我的链接在其左侧有一个额外的空格(并且它加下划线,使其显而易见)。 所以明显的解决方案是这样做:

<a href="/somepage.html"><xsl:if test="current_page='this_page'"><xsl:attribute name='class'>active</xsl:attribute></xsl:if>My Page</a>

摆脱空间。在上面的代码中没有太大的交易,但我的实际页面有更多的逻辑,使这真的很难看。我能想到清除它的唯一另一件事是将逻辑置于链接生成之外,但随后我重复了一些事情并且不得不创建更多变量。这是合理的,但仍然不完全理想。 这只是我想要这样做的一个例子,它发生了几次,所以我只是想知道是否还有其他解决方法。

2 个答案:

答案 0 :(得分:3)

也许您可以在XSLT文档的开头使用它:

<xsl:strip-space elements="a"/>

更新,这有效:

<a href="/somepage.html">
  <xsl:if test="current_page='this_page'">
   <xsl:attribute name='class'>active</xsl:attribute>
  </xsl:if>
  <xsl:text>My Page</xsl:text>
</a>

答案 1 :(得分:1)

样式表顶部的简单xsl:strip-space是否足够?

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="html" indent="yes"/>

  <xsl:strip-space elements="*"/>

  ...

</xsl:stylesheet>