如何插入&;nbsp;在XSLT中

如何插入&;nbsp;在XSLT中,xslt,Xslt,如何插入 在XSLT样式表中,我不断遇到以下错误: XML分析错误:未定义的实体 基本上,我希望XSLT模板中有一个不间断的空格字符。使用实体代码 取而代之 是一个HTML“字符实体引用”。XML中没有不间断空格的命名实体,因此使用代码  ,您可以看到XML中只有5个“预定义实体”,但HTML有200多个。我还将指出哪些答案很好。请使用此选项 <xsl:text disable-output-escaping="yes">&amp;</xsl:text

如何插入

在XSLT样式表中,我不断遇到以下错误:

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


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

使用实体代码
 取而代之

是一个HTML“字符实体引用”。XML中没有不间断空格的命名实体,因此使用代码
 

,您可以看到XML中只有5个“预定义实体”,但HTML有200多个。我还将指出哪些答案很好。

请使用此选项

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

编辑:向下投票者可能应该首先验证这是否有效(它确实有效,并且是问题的最通用解决方案。)

您可能希望在文件开头添加此实体的定义(在xml声明下面):



您还可以添加更多实体,如Ntilde、Aacute等。

您也可以这样做:

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

我试图在HTML表格中的空单元格上显示边框。我在空单元格中使用不间断空格的老技巧在xslt中不起作用。我使用了同样效果的换行符。我提到这一点只是为了防止您尝试使用非中断空间的原因是为了给“空”表单元格提供一些内容,以便打开单元格边框

<br/>

此外,还可以在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:output
设置为XSLT模板定义实体


当包含所有字符引用时,最好使用本地实体解析器来防止XSLT引擎从Internet获取字符实体定义。JAXP或显式Xalan-J用户可能需要一个补丁,以便Xalan-J正确使用解析器。有关补丁下载和评论,请参阅我的博客。

当您使用以下选项(不使用
禁用输出转义)
!)时,您将获得一个不间断的空间:

 

&160工作得非常好。但是,它将在ANSI编码中显示其中一个奇怪的字符<代码>
最适合我

<xsl:text> </xsl:text>

您还可以使用:

<xsl:value-of select="'&amp;nbsp'"/>

请记住&后面的amp,否则会收到错误消息

样式表必须是格式良好的XML。由于
不是其中之一,因此它不能直接包含在样式表中。 因此,回到您的解决方案
” ;“
是您应该使用的
的完美替代品

例如:

<xsl:value-of select="$txtFName"/>&#160;<xsl:value-of select="$txtLName"/>
 ;
尝试使用

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

但这取决于您使用的XSLT处理器:XSLT规范不要求XSLT处理器将其转换为“

尽管@brabster和其他人已经提供了答案。
我认为更可重用的解决方案是:

<xsl:variable name="space">&#160;</xsl:variable>
...
<xsl:value-of select="$space"/>
 ;
...

不确定,但我已经测试了我的方法,并且它是有效的,所以我不确定否决票是为了什么:(另外,根据链接页面,接受的答案对所有解析器都无效;只是一个提示我之前已经给出了我的否决票的原因,但是如果我否决这个答案,那么原因将是-它回答了错误的问题。OP清楚地问到如何使用xslt放入不可破空间,而您回答了如何放入安培和-n-b-s-p-分号序列。为否决票争吵也不太容易。但说真的,你从来没有说过CDATA吗?好的,jagprinderdeep,我撤销我的否决票,但作为回报,请在我到达精神病院后来看我。(注意,我不会因为这个新的原因给你否决票)。但请务必理解,您回答了错误的问题。我认为这正是另一次否决投票背后的原因。我也否决了投票,因为您不能保证接收端会声明。如果您使用xslt+html,那么是的,这是一种方法,尽管是一种黑客行为。但是,如果您使用xslt生成其他xml,那么它只会爆炸我们最近遇到了一种情况,许多XSL中只有一个停止使用这种技术,并开始显示一个奇怪的字符。但是,如果我使用WaterSoul的CDATA技术,它会工作。@BrianReindel,这可能意味着您使用了错误的数字实体引用,即
Š;
,而不是
 ;
,而不是
后者将始终解析为Unicode不间断空格。该链接非常有用。 ;它将两个字段分开该链接已损坏。您不需要
禁用输出转义
为此,使用可接受的答案,我在XML输出中得到了一个换行空格(至少在VS2010的XML编辑器中是这样的)。使用这个答案,我只得到一个空格。@Matthijs,这是一个空格,不是一个不间断的空格,这是不一样的。如果VS显示不正确,请检查您的编码(VS完全能够正确显示,它应该是独立编码的,所以您更有可能是在做其他错误的事情)。您也可以使用 ;与 ;相同。请看这里,如果处理器支持
禁用输出转义
,这将起作用,这是不需要的,并且在XSLT 2.0中被弃用,在3.0中更是如此。在这些版本中,您可以通过
xsl:character map
达到相同的效果,从而保证跨处理器工作。此外,这将输出中的命名实体
,不一定与非中断空格相同,并且接收端必须声明此实体(在HTML中通常是隐式的)。请注意,最近,W3 sta
<xsl:variable name="space">&#160;</xsl:variable>
...
<xsl:value-of select="$space"/>