我有一个 XSLT 转换,可将
放入我的输出中。那是一个狭窄的、不间断的空间。以下是导致 nnbsp 的部分:
<span>
<xsl:text>§ </xsl:text>
<xsl:value-of select="$firstsection"/>
<xsl:text> to </xsl:text>
<xsl:value-of select="$lastsection"/>
</span>
本例中的 nnbsp 位于 §
和文本 to
之后。
<span>§ 1 to 8</span>
(有趣的是,to
之前的空格原来是常规的全尺寸空格)
这发生在我的 UTF-8 编码输出以及 iso-8859-1 (latin1) 中。
如何避免 nnbsp?虽然狭窄的空间在视觉上更合适,但它并不适用于所有阅读本文档的设备。我需要一个普通的空白区域。
有变换设置吗?我在命令行使用 Saxon 9。
我应该进行另一个转换..使用替换模板来替换 nnbsp 吗?
我应该像上面那样重新制作我的模板吗?例如,如果我执行 concat()
这会是更好的编码实践吗?
更新:对于那些有一天可能会发现这个问题的人...按照迈克尔·凯的建议,我进一步研究了这个问题。事实上,事实证明,narrow-NBSP 存在于源 XML 文件中(并通过剪切/粘贴渗透到我的模板中)。我不知道这一点,而且很难发现(向 gVim 十六进制 View 致敬)。在 GUI 编辑器中,这些窄条并不会完全吸引你的注意。我无法控制源 XML 的生成,因此我必须找到一种方法来“处理它”。埃里克(Eric)下面的回答是我清理窄nbsp的首选方法。 SED 编辑过去是(现在也是)另一个值得考虑的选择,但我喜欢尽可能将我的作品保留在 XSLT 中。所以埃里克的建议对我来说很有效。
最佳答案
您可以使用translate()
function用其他东西替换您的 nnbsp ,但由于您使用的是 Saxon 9,您可以依赖 XSLT 2.0 功能并使用 character map例如,它会自动为您执行此类操作(假设您想用不间断空格替换它们:
<xsl:output use-character-maps="nnbsp"/>
<xsl:character-map name="nnbsp">
<xsl:output-character character=" " string=" "/>
</xsl:character-map>
埃里克
关于xslt - 防止 XSLT 输出中出现窄不间断空格 (n-nbsp),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20993664/