如何插入

,

进入XSLT样式表,我一直得到这个错误:

XML解析错误:未定义的实体

实际上,我希望XSLT模板中有一个不间断的空格字符。


当前回答

除了victor hugo的答案,还可以在XSLT文件中获得所有已知的合法字符引用,如下所示:

<!DOCTYPE stylesheet [
  <!ENTITY % w3centities-f PUBLIC "-//W3C//ENTITIES Combined Set//EN//XML"
      "http://www.w3.org/2003/entities/2007/w3centities-f.ent">
  %w3centities-f;
]>
...
<xsl:text>&amp; &nbsp; &ndash;</xsl:text>

与<xsl:text disable-output-escaping="yes"> one相比,这种方法的结果也有一定的差异。后者将产生像&nbsp;对于所有类型的输出,甚至对于<xsl:output method="text">,这可能发生与您希望的不同…相反,通过<!获取为XSLT模板定义的实体DOCTYPE……<!实体……将始终产生与xsl:output设置一致的输出。

在包含所有字符引用时,明智的做法是使用本地实体解析器,以防止XSLT引擎从Internet获取字符实体定义。JAXP或显式Xalan-J用户可能需要一个补丁,以便Xalan-J正确使用解析器。看看我的博客XSLT,实体,Java, Xalan…补丁下载和评论。

其他回答

当你使用以下语句时(没有disable-output-escaping!),你会得到一个不间断的空格:

< xsl: text > & # 160; < / xsl: text >

你也可以这样做:

<xsl:text disable-output-escaping="yes"><![CDATA[&nbsp;]]></xsl:text>

我不知道它是否有用,但我有这样的工作:

我定义了一个新的实体:

The healthy animal is up<nbsp />and<nbsp />do­ing.

然后我有一个新定义的模板:

<xsl:template match="nbsp" >
    <xsl:text disable-output-escaping='yes'>&amp;nbsp;</xsl:text>
</xsl:template>

解析后会得到:

"The healthy animal is up &nbsp; and &nbsp; doing"

我知道<nbsp/>几乎和&nbsp一样长,所以打字不多。

你还可以使用:

<xsl:value-of select="&#160;"/>

试着使用

<xsl:text>&#160;</xsl:text>

但这取决于所使用的XSLT处理器:XSLT规范不要求XSLT处理器将其转换为“&nbsp;”。