在xslt中使用html实体(例如 )

在XSLT中包含一个html实体的最好方法是什么?

<xsl:template match="/a/node"> <xsl:value-of select="."/> <xsl:text>&nbsp;</xsl:text> </xsl:template> 

这个返回一个XsltParseError

您可以使用CDATA部分

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

或者你可以在本地DTD中描述:

 <!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#160;"> ]> 

或者只是使用&#160; 而不是&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>&nbsp;&minus;30&deg;</xsl:text> 

<xsl:text disable-output-escaping="yes">方法相比,结果存在一定差异。 后者将会产生string文字,如&nbsp; 对于所有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">&amp;nbsp;</xsl:text> 

XSLT默认只处理五个基本实体: ltgtaposquotamp 。 所有其他人需要被定义为@Aku提及。

这个返回一个XsltParseError

是的,其原因是, 不是XML或XSLT中的预定义实体,因为它在HTML中。

你可以只使用unicode字符&nbsp; 代表: &#160;

现在有了Unicode,使用命名字符实体通常会起反作用。 我build议使用Unicode字符作为非破坏性空间而不是实体,只是出于这个原因。 或者,您可以使用实体&#160 ;而不是命名的实体。 使用命名实体使您的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">&amp;#160;</xsl:text> 

上述的混合。 感谢Stackoverflow贡献者!

文本标签之间的一个空格字符应该是足够的。