XSLT生成HTML出现多余换行问题(Apache FOP 2.3)
解决XSLT输出HTML时span内部多余空白导致的显示问题
问题原因
你的XSLT模板中,<span>标签内部的换行和缩进空白被当作文本节点输出到最终HTML中,再加上span设置了white-space: pre,浏览器会原样渲染这些空白,导致文本换行、内容错位。
解决方案
方案1:紧凑编写XSLT模板,消除span内部多余空白
修改模板,将<xsl:value-of>与<span>标签写在同一行,避免模板中的换行和缩进被输出:
<xsl:template match="text"> <div> <span><xsl:value-of select="."/></span> </div> </xsl:template>
这样输出的span内部只会包含<text>元素的原始文本,不会混入模板产生的空白。
方案2:用normalize-space()过滤文本空白
如果模板的排版无法调整,可以在取值时使用normalize-space()去除文本前后的空白,并合并中间的连续空白:
<xsl:template match="text"> <div> <span> <xsl:value-of select="normalize-space(.)"/> </span> </div> </xsl:template>
⚠️ 注意:该方法会移除原始文本首尾的空白,并合并中间连续空格,若你的原始文本需要保留这类空白,请勿使用。
方案3:调整CSS样式,忽略不必要的空白
若不想修改XSLT代码,可调整span的white-space属性:
span { white-space: pre-line; /* 保留硬换行,合并连续空白 */ /* 或使用 white-space: normal; 完全忽略多余空白,自动换行 */ }
pre-line会保留文本中的手动换行,但自动合并连续空格和缩进;normal则会忽略所有多余空白,根据容器宽度自动换行,可根据实际需求选择。
内容的提问来源于stack exchange,提问作者CrazyEight
相关产品推荐
相关产品推荐

