如何在XSLT 1.0中添加/后缀空格(ISO2022cgi支付模板场景)
XSLT 1.0 实现固定长度空格填充方案
针对你需要将数据补至35个普通空格字符的需求,这里提供两个可行的XSLT 1.0实现方案:
方案1:递归模板填充
通过递归模板循环添加空格,直到字符串长度达到35,超出则截断:
<xsl:template name="pad-to-35-spaces"> <xsl:param name="source-text" /> <!-- 目标长度固定为35,也可改为参数灵活调整 --> <xsl:param name="target-length" select="35" /> <xsl:choose> <!-- 若原字符串长度已达标,直接取前35位 --> <xsl:when test="string-length($source-text) >= $target-length"> <xsl:value-of select="substring($source-text, 1, $target-length)" /> </xsl:when> <!-- 未达标则追加一个空格,继续递归 --> <xsl:otherwise> <xsl:call-template name="pad-to-35-spaces"> <xsl:with-param name="source-text" select="concat($source-text, ' ')" /> <xsl:with-param name="target-length" select="$target-length" /> </xsl:call-template> </xsl:otherwise> </xsl:choose> </xsl:template>
调用方式示例:
<!-- 假设你的数据来自名为payment-data的节点 --> <xsl:call-template name="pad-to-35-spaces"> <xsl:with-param name="source-text" select="payment-data" /> </xsl:call-template>
方案2:预拼接空格串截取
这种方法更简洁,提前定义足够长的空格串,拼接后截取前35位:
<!-- 定义至少35个普通空格的字符串 --> <xsl:variable name="space-pool" select="' '" /> <!-- 拼接原数据和空格池,取前35位 --> <xsl:value-of select="substring(concat(your-data-node, $space-pool), 1, 35)" />
关键说明
- 两种方案输出的都是普通ASCII空格(十六进制0x20),符合银行的格式要求,避免了非断空格的兼容性问题。
- 直接添加空格会被合并,是因为XML默认会压缩连续空白字符,上述方案通过构造固定长度的字符串,确保输出的空格不会被XSLT或XML处理器合并。
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

