如何插入
在XSLT样式表中,我不断收到此错误:
XML解析错误:未定义的实体
基本上我想在XSLT模板中使用非空格字符。
答案 0 :(得分:323)
请改为使用实体代码 
。
是HTML“字符实体引用”。 XML中没有非破坏空间的命名实体,因此您使用代码 
。
Wikipedia includes a list of XML and HTML entities,您可以看到XML中只有5个“预定义实体”,但HTML已超过200个。我还会指向Creating a space ( ) in XSL,它有很好的答案。
答案 1 :(得分:31)
 
效果很好。但是,它将以ANSI编码显示其中一个奇怪的字符。 <xsl:text>
对我来说效果最好。
<xsl:text> </xsl:text>
答案 2 :(得分:24)
也可以这样做:
<xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text>
答案 3 :(得分:20)
使用此
<xsl:text disable-output-escaping="yes">&</xsl:text>nbsp;
编辑:Downvoters应该首先验证这是否有效(确实如此,并且是解决问题的最常用方法。)
答案 4 :(得分:13)
您可能希望在文件开头添加此实体的定义(在xml声明下方):
<!DOCTYPE stylesheet [
<!ENTITY nbsp " " >
]>
您还可以添加更多实体,例如Ntilde,Aacute等。
答案 5 :(得分:5)
除了victor hugo's answer之外,还可以在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引擎不从Internet获取字符实体定义可能是明智的。 JAXP或显式Xalan-J用户可能需要Xalan-J的补丁才能正确使用解析器。有关修补程序下载和评论,请参阅我的博客XSLT, entities, Java, Xalan...。
答案 6 :(得分:2)
当您使用以下内容(没有disable-output-escaping
!)时,您将获得一个不间断的空间:
<xsl:text> </xsl:text>
答案 7 :(得分:2)
XSLT样式表必须是格式良好的XML。由于" "
不是the five predefined XML entities中的一个,因此无法直接将其包含在样式表中。
因此,回到您的解决方案" "
是您应该使用的" "
的完美替代。
示例:
<xsl:value-of select="$txtFName"/> <xsl:value-of select="$txtLName"/>
答案 8 :(得分:0)
你也可以使用:
<xsl:value-of select="'&nbsp'"/>
记住&amp;后面的放大器或者你会收到一条错误信息
答案 9 :(得分:0)
尝试使用
<xsl:text> </xsl:text>
但它取决于您使用的XSLT处理器:XSLT规范不要求XSLT处理器将其转换为“
”。
答案 10 :(得分:0)
尽管@brabster和其他人已经提供了答案。
我认为更可重用的解决方案是:
<xsl:variable name="space"> </xsl:variable>
...
<xsl:value-of select="$space"/>
答案 11 :(得分:-1)
我试图在HTML表格中的空单元格上显示边框。我在空单元格中使用不间断空格的旧技巧不适用于xslt。我使用了具有相同效果的换行符。我提到这一点,以防你试图使用不间断空格的原因是为了打开单元格边框,为“空”表格单元格提供一些内容。
<br/>