xslt - 防止 XSLT 输出中出现窄不间断空格 (n-nbsp)

标签 xslt encoding

我有一个 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>§&#x202f;1 to&#x202f;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="&#x202f;" string="&#xa0;"/>   
</xsl:character-map>

埃里克

关于xslt - 防止 XSLT 输出中出现窄不间断空格 (n-nbsp),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20993664/

相关文章:

xslt - 基于 webkit 引擎的浏览器中的 substring-before() 和 substring-after 问题

xml - 在 xslt 中使用正则表达式进行字符串的模式匹配

Python 的 glob 模块和 unix 的 find 命令不识别非 ascii

c - GTK+ 2.24。如何在C中使用unicode符号

javax.crypto.IllegalBlockSizeException : last block incomplete in decryption - Decrypting an encrypted AES String

xml - 如何根据 XSL 中的链接类型更改目标

xml - XSL : output of "nested" structures

xslt - Wix Heat - 使用 XSLT 将自动生成的 GUID 替换为已知字符串

linux - 文本文件包含奇怪的字符行 - 想要修复

java - 当在 Java 中的 Linux 服务器中选择日语时,下载 CSV 文件头会变得垃圾