如何插入
,
进入XSLT样式表,我一直得到这个错误:
XML解析错误:未定义的实体
实际上,我希望XSLT模板中有一个不间断的空格字符。
如何插入
,
进入XSLT样式表,我一直得到这个错误:
XML解析错误:未定义的实体
实际上,我希望XSLT模板中有一个不间断的空格字符。
当前回答
使用实体代码 代替。
,是一个HTML“字符实体引用”。在XML中不间断空格没有命名实体,因此使用代码 。
Wikipedia包含一个XML和HTML实体列表,您可以看到XML中只有5个“预定义实体”,但HTML有200多个。我还将指出在XSL中创建一个空间( ),它有很好的答案。
其他回答
我不知道它是否有用,但我有这样的工作:
我定义了一个新的实体:
The healthy animal is up<nbsp />and<nbsp />doing.
然后我有一个新定义的模板:
<xsl:template match="nbsp" >
<xsl:text disable-output-escaping='yes'>&nbsp;</xsl:text>
</xsl:template>
解析后会得到:
"The healthy animal is up and doing"
我知道<nbsp/>几乎和 一样长,所以打字不多。
使用这个
<xsl:text disable-output-escaping="yes">&</xsl:text>nbsp;
编辑:持反对意见的选民可能应该先验证一下这个方法是否有效(它确实有效,而且是解决问题的最普遍的方法。)
你也可以这样做:
<xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text>
除了victor hugo的答案,还可以在XSLT文件中获得所有已知的合法字符引用,如下所示:
<!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>& –</xsl:text>
与<xsl:text disable-output-escaping="yes"> one相比,这种方法的结果也有一定的差异。后者将产生像 对于所有类型的输出,甚至对于<xsl:output method="text">,这可能发生与您希望的不同…相反,通过<!获取为XSLT模板定义的实体DOCTYPE……<!实体……将始终产生与xsl:output设置一致的输出。
在包含所有字符引用时,明智的做法是使用本地实体解析器,以防止XSLT引擎从Internet获取字符实体定义。JAXP或显式Xalan-J用户可能需要一个补丁,以便Xalan-J正确使用解析器。看看我的博客XSLT,实体,Java, Xalan…补丁下载和评论。
XSLT样式表必须是格式良好的XML。因为“ ”不是五个预定义的XML实体之一,所以它不能直接包含在样式表中。 所以回到你的解决方案,“ ”是你应该使用的“ ”的完美替代品。
例子:
<xsl:value-of select="$txtFName"/> <xsl:value-of select="$txtLName"/>