XSLT concat函数空格处理:避免无值时出现多余空格
解决XSLT拼接字符串时的空格处理问题
好问题!这种“带分隔符拼接但避免多余空格”的场景在字符串处理里太常见了,我给你几个实用的解决方案,从兼容老版本到简洁优雅的都有:
方案1:用xsl:choose做显式条件判断(兼容XSLT 1.0)
如果你的环境只能用XSLT 1.0,这种最稳妥,逻辑清晰一目了然:
<xsl:choose> <!-- 两个变量都非空时,中间加空格拼接 --> <xsl:when test="$var15_cond_result_exists and $var16_cond_result_exists"> <xsl:value-of select="concat($var15_cond_result_exists, ' ', $var16_cond_result_exists)"/> </xsl:when> <!-- 只有第一个变量非空,直接输出 --> <xsl:when test="$var15_cond_result_exists"> <xsl:value-of select="$var15_cond_result_exists"/> </xsl:when> <!-- 只有第二个变量非空,直接输出 --> <xsl:when test="$var16_cond_result_exists"> <xsl:value-of select="$var16_cond_result_exists"/> </xsl:when> <!-- 都为空时输出空字符串 --> <xsl:otherwise> <xsl:text></xsl:text> </xsl:otherwise> </xsl:choose>
方案2:用normalize-space简化代码(兼容XSLT 1.0)
不想写一堆条件判断?可以利用normalize-space自动去除首尾空格的特性,一步到位:
<xsl:value-of select="normalize-space(concat($var15_cond_result_exists, ' ', $var16_cond_result_exists))"/>
效果说明:
- 当两个变量都非空:
concat得到"John Smith",normalize-space保持原样 - 当其中一个为空:比如
var1为空,concat得到" Smith",normalize-space会去掉开头空格,输出"Smith" - 当两个都为空:
concat得到" ",normalize-space输出空字符串
方案3:用string-join优雅解决(XSLT 2.0及以上)
如果你的环境支持XSLT 2.0或更高版本,直接用string-join函数是最简洁的方式——它会自动忽略序列中的空字符串,不会产生多余分隔符:
<xsl:value-of select="string-join(($var15_cond_result_exists, $var16_cond_result_exists), ' ')"/>
这个函数专门用来处理“带分隔符拼接非空元素”的场景,代码干净又易读。
内容的提问来源于stack exchange,提问作者xMilos
相关产品推荐
相关产品推荐

