如何插入&;nbsp;在XSLT中
如何插入如何插入&;nbsp;在XSLT中,xslt,Xslt,如何插入 在XSLT样式表中,我不断遇到以下错误: XML分析错误:未定义的实体 基本上,我希望XSLT模板中有一个不间断的空格字符。使用实体代码 取而代之 是一个HTML“字符实体引用”。XML中没有不间断空格的命名实体,因此使用代码 ,您可以看到XML中只有5个“预定义实体”,但HTML有200多个。我还将指出哪些答案很好。请使用此选项 <xsl:text disable-output-escaping="yes">&</xsl:text
在XSLT样式表中,我不断遇到以下错误:
XML分析错误:未定义的实体
基本上,我希望XSLT模板中有一个不间断的空格字符。使用实体代码
代码>取而代之
是一个HTML“字符实体引用”。XML中没有不间断空格的命名实体,因此使用代码 代码>
,您可以看到XML中只有5个“预定义实体”,但HTML有200多个。我还将指出哪些答案很好。请使用此选项
<xsl:text disable-output-escaping="yes">&</xsl:text>nbsp;
&;nbsp;
编辑:向下投票者可能应该首先验证这是否有效(它确实有效,并且是问题的最通用解决方案。)您可能希望在文件开头添加此实体的定义(在xml声明下面):
您还可以添加更多实体,如Ntilde、Aacute等。您也可以这样做:
<xsl:text disable-output-escaping="yes"><![CDATA[ ]]></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>& –</xsl:text>
...
&&恩达什;
与
方法相比,这种方法的结果也有一定差异。后者将为所有类型的输出生成字符串文本,如
,甚至是
,这可能与您希望的不同。。。相反,通过xsl:output
设置为XSLT模板定义实体
当包含所有字符引用时,最好使用本地实体解析器来防止XSLT引擎从Internet获取字符实体定义。JAXP或显式Xalan-J用户可能需要一个补丁,以便Xalan-J正确使用解析器。有关补丁下载和评论,请参阅我的博客。当您使用以下选项(不使用禁用输出转义)
!)时,您将获得一个不间断的空间:
代码>&160代码>工作得非常好。但是,它将在ANSI编码中显示其中一个奇怪的字符<代码>
最适合我
<xsl:text> </xsl:text>
您还可以使用:
<xsl:value-of select="'&nbsp'"/>
请记住&后面的amp,否则会收到错误消息样式表必须是格式良好的XML。由于“
不是其中之一,因此它不能直接包含在样式表中。
因此,回到您的解决方案” ;“
是您应该使用的”
的完美替代品
例如:
<xsl:value-of select="$txtFName"/> <xsl:value-of select="$txtLName"/>
;
尝试使用
<xsl:text> </xsl:text>
;
但这取决于您使用的XSLT处理器:XSLT规范不要求XSLT处理器将其转换为“
” 尽管@brabster和其他人已经提供了答案。
我认为更可重用的解决方案是:
<xsl:variable name="space"> </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"> </xsl:variable>
...
<xsl:value-of select="$space"/>