我该如何在XSLT样式表中插入
,我一直收到这个错误:本质上,我想在XSLT模板中使用一个不间断空格字符。XML解析错误:未定义实体
,我一直收到这个错误:本质上,我想在XSLT模板中使用一个不间断空格字符。XML解析错误:未定义实体
 
代替。
是HTML的“字符实体引用”。在XML中没有非断空格的命名实体,因此您需要使用代码 
。
Wikipedia包括XML和HTML实体列表,您可以看到XML中只有5个“预定义实体”,但HTML有超过200个。我还会指向在XSL中创建空格( ),其中有很好的答案。Š
而不是 
,后者将始终解析为Unicode不间断空格。 - Abel 
非常有效,但在ANSI编码中会显示一个奇怪的字符。<xsl:text>
对我来说效果最好。
<xsl:text> </xsl:text>
你还可以这样做:
<xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text>
disable-output-escaping
,但不是必需的,并且在XSLT 2.0中已被弃用,在3.0中更是如此。在这些版本中,您可以使用xsl:character-map
实现相同的效果,保证跨处理器工作。此外,这会在输出中放置一个命名实体
,它不一定与非断空格相同,接收端必须声明此实体(在HTML中通常是隐式的)。 - Abel请使用此功能
<xsl:text disable-output-escaping="yes">&</xsl:text>nbsp;
更新:投票者应该先验证此方法是否有效(事实上它是有效的,也是这个问题的最通用解决方案)。
您可能希望在文件开头(xml声明下方)添加此实体的定义:
<!DOCTYPE stylesheet [
<!ENTITY nbsp " " >
]>
除此之外,您还可以添加更多的实体,例如Ntilde、Aacute等。
除了维克多·雨果的答案之外,还可以通过以下方式获取在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>& –</xsl:text>
<xsl:text disable-output-escaping="yes">
的结果也有所不同。后者会为所有输出生成字符串文字,例如对于<xsl:output method="text">
,甚至包括
,这可能与您的意愿不同...相反,通过<!DOCTYPE ... <!ENTITY ...
定义XSLT模板的实体将始终产生与您的xsl:output
设置一致的输出。XSLT 样式表必须是格式良好的 XML。由于 " "
不属于 五个预定义的 XML 实体 之一,因此不能直接包含在样式表中。
因此,回到您的解决方案," "
是 " "
的完美替代品,您应该使用它。
示例:
<xsl:value-of select="$txtFName"/> <xsl:value-of select="$txtLName"/>
disable-output-escaping
!)时,您将获得一个单独的不间断空格:<xsl:text> </xsl:text>
。disable-output-escaping
来实现此功能。 - Ian Roberts虽然@brabster和其他人已经提供了答案。
我认为更可重用的解决方案是:
<xsl:variable name="space"> </xsl:variable>
...
<xsl:value-of select="$space"/>
<xsl:text> </xsl:text>
但这取决于您使用的XSLT处理器:XSLT规范不要求XSLT处理器将其转换为 "
"。