在 XSLT 中使用 HTML 实体(例如 )
Posted
技术标签:
【中文标题】在 XSLT 中使用 HTML 实体(例如 )【英文标题】:Using an HTML entity in XSLT (e.g. ) 【发布时间】:2010-09-07 02:35:45 【问题描述】:在 XSLT 中包含 html 实体的最佳方式是什么?
<xsl:template match="/a/node">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
</xsl:template>
这个返回一个 XsltParseError
【问题讨论】:
【参考方案1】:您可以使用 CDATA 部分
<xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text>
或者您可以在本地 DTD 中描述  :
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp " "> ]>
或者只使用&#160;
而不是&nbsp;
【讨论】:
【参考方案2】:这个返回一个 XsltParseError
是的,原因是&nbsp;
不是 XML 或 XSLT 中的预定义实体,因为它在 HTML 中。
你可以只使用&nbsp;
代表的unicode字符:&#160;
【讨论】:
【参考方案3】:在 xslt 中使用 html 实体的另一种可能性是:
<xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>
【讨论】:
Unicode 字符 给出了问号和方框,输出未转义的 html 实体对我有用,谢谢。【参考方案4】:XSLT 默认只处理五个基本实体:lt
、gt
、apos
、quot
和 amp
。所有其他人都需要定义为@Aku提及。
【讨论】:
【参考方案5】:现在有了 Unicode,使用命名字符实体通常会适得其反。出于这个原因,我建议将 Unicode 字符用于不间断空格而不是实体。或者,您可以使用实体&#160
;,而不是命名实体。使用命名实体会使您的 XML 依赖于内联或外部 DTD。
【讨论】:
【参考方案6】:
文本标签之间有一个空格字符就足够了。
【讨论】:
【参考方案7】:还可以从aku's answer 的第二部分扩展该方法并获取所有可用的已知字符引用,如下所示:
<!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">
方法相比,结果存在一定差异。后者将为各种输出生成字符串文字,例如&nbsp;
,甚至是<xsl:output method="text">
,这可能与您可能希望的不同......相反,获取为XSLT模板定义的实体通过<!DOCTYPE ... <!ENTITY ...
将始终产生与您的xsl:output
设置一致的输出。
使用本地实体解析器来阻止 XSLT 引擎从 Internet 获取字符实体定义可能是明智之举。 JAXP 或明确的 Xalan-J 用户可能需要 Xalan-J 的补丁才能正确使用解析器。有关补丁下载和 cmets,请参阅我的博客 XSLT, entities, Java, Xalan...。
【讨论】:
这很漂亮-希望它更广为人知【参考方案8】:感谢您的信息。当我在 Dynamicweb CMS 的模板中进行 XSLT 转换时,我根据对我有用的方法写了一篇简短的博客文章。
博文在此:How to add entities to XSLT templates。
/Sten Hougaard
【讨论】:
【参考方案9】:我发现所有这些解决方案都在空白处产生了一个字符。
使用<xsl:text> </xsl:text>
为我解决了问题;但<xsl:text>#x20;</xsl:text>
也可以。
【讨论】:
【参考方案10】:必须使用实体#x160;
【讨论】:
它不是 x160,而是十进制的160。【参考方案11】:我对 Aku 的 DOCTYPE 方法不满意。
在 Windows 2003 服务器上的 MSXML 转换中对我有用的是
<xsl:text disable-output-escaping="yes">&#160;</xsl:text>
上面的混合体。感谢 *** 的贡献者!
【讨论】:
以上是关于在 XSLT 中使用 HTML 实体(例如 )的主要内容,如果未能解决你的问题,请参考以下文章