在XSLT中包含html实体的最佳方法是什么?
<xsl:template match="/a/node">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
这个返回一个XsltParseError
aku*_*aku 116
您可以使用CDATA部分
<xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text>
Run Code Online (Sandbox Code Playgroud)
或者您可以在本地DTD中描述:
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp " "> ]>
Run Code Online (Sandbox Code Playgroud)
或者只是用 而不是
Ser*_*kov 23
也可以从aku的答案的第二部分扩展该方法,并获得所有已知的字符引用,如下所示:
<!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> −30°</xsl:text>
Run Code Online (Sandbox Code Playgroud)
与<xsl:text disable-output-escaping="yes">方法相比,结果存在一定差异.后者将产生类似于 各种输出的字符串文字,即使是<xsl:output method="text">,这可能恰好与您希望的不同...相反,获取为XSLT模板定义的实体<!DOCTYPE ... <!ENTITY ...将始终产生输出一致与您的xsl:output设置.
因此,使用本地实体解析器来保持XSLT引擎不从Internet获取字符实体定义可能是明智的.JAXP或显式Xalan-J用户可能需要Xalan-J的补丁才能正确使用解析器.请参阅我的博客XSLT,实体,Java,Xalan ......以获取补丁下载和评论.
Pie*_*ing 14
另一种在xslt中使用html实体的可能性如下:
<xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>
Run Code Online (Sandbox Code Playgroud)
这个返回一个XsltParseError
是的,其原因在于 它不是XML或XSLT中的预定义实体,因为它在HTML中.
您可以使用unicode字符 代表: 
现在有了Unicode,使用命名字符实体通常会产生反效果.出于这个原因,我建议将Unicode字符用于非中断空间而不是实体.或者,您可以使用实体 而不是命名实体.使用命名实体使您的XML依赖于内联或外部DTD.