如何在XSLT 2.0中添加指定数量空白字符?替代xsl:text方案咨询
嘿,这个场景我熟!在做XML转定长报文的时候,除了用<xsl:text>硬敲空格之外,还有几个更灵活的实现方式,尤其是应对动态长度需求的时候特别好用:
1. 用substring配合预定义长空格串
先在样式表里定义一个足够长的空格变量(比如一次性写200个空格,覆盖大部分常见的长度需求),之后用substring截取你需要的长度就行:
<!-- 预定义一个包含大量空格的变量 --> <xsl:variable name="full-spaces" select="' '" /> <!-- 生成4个空格 --> <xsl:value-of select="substring($full-spaces, 1, 4)" /> <!-- 如果长度是动态的(比如来自XML节点) --> <xsl:value-of select="substring($full-spaces, 1, number(//required-space-count))" />
这个方法简单直接,固定长度场景下用起来最快,动态长度也能轻松适配。
2. 用for-each循环动态生成空格
要是你的空格长度是从XML里动态获取的(比如某个节点存了需要的空格数),可以用循环来逐个生成空格:
<!-- 假设XML里有个节点<space-length>存了需要的长度,比如15 --> <xsl:for-each select="1 to number(//space-length)"> <xsl:text> </xsl:text> </xsl:for-each>
原理很简单:生成一个从1到目标长度的序列,循环每一项就输出一个空格,刚好凑够指定数量。XSLT 1.0和2.0都支持这个写法。
3. XSLT 2.0+专属:string-repeat内置函数
如果你的XSLT处理器支持2.0及以上版本(比如Saxon),直接用内置的string-repeat函数一步到位,代码最简洁:
<!-- 生成4个空格 --> <xsl:value-of select="string-repeat(' ', 4)" /> <!-- 动态长度的情况 --> <xsl:value-of select="string-repeat(' ', number(//required-spaces))" />
这个写法可读性拉满,可惜XSLT 1.0没有这个函数,所以得先确认你的环境支持。
小提示
如果是固定长度的空格,比如X(4),其实用<xsl:text> </xsl:text>也没问题,但如果长度很长或者需要动态变化,上面的方法会更维护友好,不用数一堆空格数到眼花~
内容的提问来源于stack exchange,提问作者kuhu jain
相关产品推荐
相关产品推荐

