XSLT转换时如何移除文本与sup标签间的多余空格?
解决XSLT转换中文本与脚注标签间的多余空格问题
核心原因
XML里trust.与footnote标签之间的换行被解析为文本节点的空白字符,转换时这些空白会被保留,最终在HTML中显示为trust.与<sup>之间的空格。normalize-space()无效大概率是因为没精准定位到包含末尾空白的文本节点,或是该函数会同时处理文本内部的空格(如果需要保留内部空格的话)。
可行解决方案
1. 剥离指定元素的空白节点
在XSLT开头添加xsl:strip-space,移除特定元素内的空白文本节点,避免换行被解析为有效空白:
<xsl:strip-space elements="para footnote"/> <!-- 替换为你实际使用的父元素和脚注元素名 -->
注意:如果其他元素需要保留空白(比如段落内的正常换行),请精准指定元素,不要用*通配所有元素。
2. 精准清理文本节点的末尾空白
针对紧跟footnote的文本节点,单独清理其末尾的空白字符,不影响文本内部的空格:
<!-- 匹配所有紧跟footnote元素的文本节点 --> <xsl:template match="text()[following-sibling::*[1][local-name()='footnote']]"> <!-- 移除文本末尾的所有空白(换行、空格、制表符等) --> <xsl:value-of select="replace(., '\s+$', '')"/> </xsl:template> <!-- 脚注转换模板 --> <xsl:template match="footnote"> <sup><xsl:apply-templates select="footnote.marker"/></sup> </xsl:template>
这个方法只处理会导致问题的特定文本节点,不会影响其他正常文本的空格。
3. 关闭HTML输出的缩进
如果你的XSLT设置了输出缩进,可能会在元素间额外插入空格,关闭缩进试试:
<xsl:output method="html" indent="no" encoding="UTF-8"/>
验证效果
用你的XML输入测试上述模板,trust.和<sup>标签之间的空格应该会被移除,符合无空格要求。
内容的提问来源于stack exchange,提问作者dlpBNA
相关产品推荐
相关产品推荐

