You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XSLT中xsl:text输出格式异常问题咨询

解决XSLT模板输出的空白(缩进/换行)异常问题

你遇到的这个问题本质上是XSLT的默认空白节点处理规则在搞鬼,我来帮你拆解原因和解决办法:

问题根源:XSLT中的空白节点保留

XSLT默认会保留样式表中除了<xsl:text>内部之外的所有空白(包括空格、换行、制表符)。我们来看你的两种写法:

第一种写法的问题

<xsl:template match="enum" mode="map">
  <xsl:text>Test 4</xsl:text><xsl:text>&#xa;</xsl:text>
  <xsl:text>Test 5</xsl:text><xsl:text>&#xa;</xsl:text>
</xsl:template>

你在模板标签<xsl:template>和第一个<xsl:text>之间有缩进的空格,还有换行——这些空白节点会被XSLT当成文本节点输出,所以就出现了Test4前面的4个缩进,以及Test3和Test4之间的空行。

第二种写法的问题

<xsl:template match="enum" mode="map">
 Test 4<xsl:text>&#xa;</xsl:text>
 <xsl:text>Test 5</xsl:text><xsl:text>&#xa;</xsl:text>
</xsl:template>

这里你把Test 4直接写在模板里,它前面的缩进空格被去掉了,但模板开头的换行、Test 4后面的换行这些空白节点依然会被输出,所以Test3和Test4之间多了两行空行。

解决办法:精准控制空白输出

有几种方式可以彻底解决这个问题:

1. 全局控制空白节点

在XSLT的根节点<xsl:stylesheet>里添加:

<xsl:strip-space elements="*"/>

这会告诉XSLT忽略所有元素节点中的空白节点,只保留你用<xsl:text>明确输出的空白。如果有些特定元素需要保留空白,可以用<xsl:preserve-space elements="xxx"/>单独指定。

2. 模板内部消除多余空白

把模板里的所有换行、缩进都删掉,或者把内容紧凑写在一行:

<xsl:template match="enum" mode="map"><xsl:text>Test 4&#xa;</xsl:text><xsl:text>Test 5&#xa;</xsl:text></xsl:template>

或者用注释包裹多余空白,既保持样式表可读性,又不输出无效空白:

<xsl:template match="enum" mode="map"><!--
  --><xsl:text>Test 4</xsl:text><xsl:text>&#xa;</xsl:text><!--
  --><xsl:text>Test 5</xsl:text><xsl:text>&#xa;</xsl-text><!--
--></xsl:template>

3. 调试小技巧

在oXygen里调试时,可以开启显示空白节点的功能(一般在XML视图的设置里),这样就能直观看到那些隐藏的空白节点,快速定位问题出在哪一行的空格/换行上。

内容的提问来源于stack exchange,提问作者Ephreal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:31:57