在XSLT中输出空格

时间:2012-05-18 14:24:49

标签: xml xslt

我的xslt模板中有以下变量。

<xsl:variable name="spaces" select="'&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;'"/>

在模板中,我正在使用变量:

<xsl:choose>
   <xsl:when test="InvestmentNone = 'true'">
      <u>X</u>
   </xsl:when>
   <xsl:otherwise>
      <u xml:space="preserve">
         <xsl:value-of select="@spaces" xml:space="preserve"/>
      </u>
   </xsl:otherwise>
</xsl:choose>

所以,基本上,如果'投资无''为'假',我希望空格显示下划线。问题是在上面的代码中,空格没有显示出来。但是,如果我删除该行

<xsl:value-of select="@spaces" xml:space="preserve"/>

并添加

&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;

直接到位,空格显示下划线。如何让变量方法起作用?原因是稍后我将使用变量填充空格。

2 个答案:

答案 0 :(得分:2)

要访问变量,您必须在其名称前加$而不是@

<xsl:variable name="spaces" select="'&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;'"/>
<xsl:value-of select="$spaces"/>

前缀@解决了属性问题,并且由于上下文节点中可能没有名为 spaces 的属性,因此在访问@spaces时会得到一个空字符串。

答案 1 :(得分:0)

除了Martin的正确答案之外,我还要指出在样式表中使用xml:space =“preserve”通常是一个坏主意。这意味着xsl:value-of指令之前和之后的空白文本节点变得重要,就像它们被包含在xsl:text中一样。我不知道为什么这没有在HTML中添加任何带下划线的空格,尽管它可能只会在浏览器渲染后显示为单个空格。