XSLT 2.0 format-number函数分组分隔符重复问题咨询
为什么XSLT 2.0的format-number会重复分组分隔符?怎么让掩码按字面解析?
嘿,我来帮你搞清楚这个问题~
问题根源:分组分隔符的递归匹配
你遇到的64-21-20输出,是因为format-number把你写的-当成了分组分隔符,而非固定位置的字面符号。
在XSLT的格式模式规则里,分组分隔符(比如逗号、短横线这类)会触发「从右往左按指定位数递归分组」的逻辑。比如你用了##-##这样的模式,函数会默认每两位数字就插入一个分隔符:
- 输入数字
642120会被从右拆分为20、21、64三个两位组 - 反向拼接后就变成了
64-21-20,这就是模式重复的核心原因。
解决方法:把分隔符标记为字面量
要让掩码按你想要的固定位置解析,关键是把-标记为固定字面量,不让它被当作分组分隔符处理。在XSLT的格式字符串中,用单引号包裹的内容会被当作纯文本解析,不会触发格式规则。
针对你的需求(得到6421-20),正确的写法有两种:
// 仅把分隔符标记为字面量 format-number(642120, "####'-'##")
或者直接把整个固定格式用单引号包裹:
// 把完整格式标记为字面量 format-number(642120, "'####-##'")
这两种写法都会让函数把-当成纯文本,只在####和##之间插入,最终输出你预期的6421-20。
如果你的数字长度不固定(比如可能是5位、6位),想要始终在最后两位前加分隔符,也可以调整模式为"#'-'##",这样不管前面有多少位数字,都会把最后两位单独拆分出来加分隔符。
内容的提问来源于stack exchange,提问作者sadmicrowave
相关产品推荐
相关产品推荐

