2

我的 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>

所以,基本上,如果“InvestmentNone”为“假”时,我希望空格显示为下划线。问题是在上面的代码中,空格没有出现。但是,如果我删除该行

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

并添加

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

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

4

2 回答 2

2

为了访问变量,您必须在其名称前加上前缀,$而不是@

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

前缀@地址属性,并且由于上下文节点中可能没有称为空格的属性,因此访问时会得到一个空字符串@spaces

于 2012-05-18T14:55:22.907 回答
0

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

于 2012-05-18T17:23:21.080 回答