在XSLT中使用HTML实体(例如 )

Pie*_*ing 62 xslt

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

<xsl:template match="/a/node">
    <xsl:value-of select="."/>
    <xsl:text>&nbsp;</xsl:text>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

这个返回一个XsltParseError

aku*_*aku 116

您可以使用CDATA部分

<xsl:text disable-output-escaping="yes"><![CDATA[&nbsp;]]></xsl:text>
Run Code Online (Sandbox Code Playgroud)

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

<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#160;"> ]>
Run Code Online (Sandbox Code Playgroud)

或者只是用&#160;而不是&nbsp;


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>&nbsp;&minus;30&deg;</xsl:text>
Run Code Online (Sandbox Code Playgroud)

<xsl:text disable-output-escaping="yes">方法相比,结果存在一定差异.后者将产生类似于&nbsp;各种输出的字符串文字,即使是<xsl:output method="text">,这可能恰好与您希望的不同...相反,获取为XSLT模板定义的实体<!DOCTYPE ... <!ENTITY ...将始终产生输出一致与您的xsl:output设置.

因此,使用本地实体解析器来保持XSLT引擎不从Internet获取字符实体定义可能是明智的.JAXP或显式Xalan-J用户可能需要Xalan-J的补丁才能正确使用解析器.请参阅我的博客XSLT,实体,Java,Xalan ......以获取补丁下载和评论.

  • 这很漂亮-希望它更出名 (2认同)

Pie*_*ing 14

另一种在xslt中使用html实体的可能性如下:

<xsl:text disable-output-escaping="yes">&amp;nbsp;</xsl:text>
Run Code Online (Sandbox Code Playgroud)


sam*_*son 6

:XSLT默认情况下只处理五个基本实体lt,gt,apos,quot,和amp.所有其他人都需要定义为@Aku提及.


Tom*_*rst 5

这个返回一个XsltParseError

是的,其原因在于&nbsp;它不是XML或XSLT中的预定义实体,因为它在HTML中.

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


Jam*_*lak 5

现在有了Unicode,使用命名字符实体通常会产生反效果.出于这个原因,我建议将Unicode字符用于非中断空间而不是实体.或者,您可以使用实体&#160;而不是命名实体.使用命名实体使您的XML依赖于内联或外部DTD.