在xslt中使用html实体(例如 )
在XSLT中包含一个html实体的最好方法是什么?
<xsl:template match="/a/node"> <xsl:value-of select="."/> <xsl:text> </xsl:text> </xsl:template>
这个返回一个XsltParseError
您可以使用CDATA部分
<xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text>
或者你可以在本地DTD中描述:
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp " "> ]>
或者只是使用 
而不是
也可以从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>
与<xsl:text disable-output-escaping="yes">
方法相比,结果存在一定差异。 后者将会产生string文字,如
对于所有types的输出,即使对于<xsl:output method="text">
,这可能会与您希望的不同……相反,通过<!DOCTYPE ... <!ENTITY ...
获取XSLT模板的实体<!DOCTYPE ... <!ENTITY ...
将始终生成与您的xsl:output
设置一致的xsl:output
。
那么使用本地实体parsing器来阻止XSLT引擎从Internet获取字符实体定义可能是明智的。 JAXP或显式Xalan-J用户可能需要Xalan-J的补丁才能正确使用parsing器。 请参阅我的博客XSLT,实体,Java,Xalan …以获取补丁下载和评论。
在xslt中使用html实体的其他可能性如下:
<xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>
XSLT默认只处理五个基本实体: lt
, gt
, apos
, quot
和amp
。 所有其他人需要被定义为@Aku提及。
这个返回一个XsltParseError
是的,其原因是, 不是XML或XSLT中的预定义实体,因为它在HTML中。
你可以只使用unicode字符
代表:  
现在有了Unicode,使用命名字符实体通常会起反作用。 我build议使用Unicode字符作为非破坏性空间而不是实体,只是出于这个原因。 或者,您可以使用实体 
;而不是命名的实体。 使用命名实体使您的XML依赖于内联或外部DTD。
感谢您的信息。 我已经写了一篇简短的博客文章,基于什么对我有用,因为我在Dynamicweb CMS的模板中进行XSLT转换。
博客post在这里: 如何添加实体到XSLT模板 。
/ Sten Hougaard
我发现所有这些解决scheme都在空白处产生了一个字符。
使用<xsl:text> </xsl:text>
解决了我的问题; 但<xsl:text>#x20;</xsl:text>
也可以。
有必要使用实体#x160;
我没有运用阿库的DOCTYPE方法。
在Windows 2003服务器上,MSXML转换对我来说有效
<xsl:text disable-output-escaping="yes">&#160;</xsl:text>
上述的混合。 感谢Stackoverflow贡献者!
文本标签之间的一个空格字符应该是足够的。