如何在XSLT中制作实体

时间:2015-06-03 12:33:05

标签: xslt xslt-1.0 xslt-2.0

如果我的部分以'#'开头,我怎么能创建实体' '?在一个变量?

当我尝试做这样的事情时:

concat('&', '#160;')

我在XMLspy中遇到语法错误。

2 个答案:

答案 0 :(得分:1)

它必须是一个实体(实际上你的意思是一个"字符引用"),还是仅仅输出一个不间断的空格字符?

要做到后者,假设$var持有"#160",在XSLT 2.0中你可以使用

<xsl:value-of select="codepoints-to-string(number(substring($var, 2)))"/>

答案 1 :(得分:0)

您的代码存在的问题是,在XML中,您无法使用独立的&,因此它应该是这样的:

concat('&amp;', '#160;')

如果输出方法为&amp;#160;则输出xml&#160;输出text

disable-output-escaping有助于在&#160;输出中强制xml

<xsl:value-of select="concat('&amp;', '#160;')" disable-output-escaping="yes"/>

用任意字符串替换字符的另一种方法是使用字符映射:

<xsl:output use-character-maps="foo"/>

<xsl:character-map name="foo">
   <xsl:output-character character="&amp;" string="&amp;"/>
</xsl:character-map>

<xsl:template match="/">
   <xsl:value-of select="concat('&amp;', '#160;')"/>
</xsl:template>