如何在XSLT中拆分逗号分隔字符串以提取目标值0
问题原因
你的现有代码存在两个缺陷:
- 未处理字符串中的单引号,最终得到的结果会包裹单引号,不是纯
0 - 当字符串仅包含两个值(如
case three: 'T','0')时,第一次截取后的内容不存在第二个逗号,substring-before会返回空值。
解决方案
XSLT 2.0 及以上版本
直接使用tokenize函数拆分,逻辑更简洁:
replace(tokenize($inputString, ',')[2], '''', '')
逻辑说明:
- 按逗号拆分字符串为序列,取下标为2的元素(XSLT序列下标从1开始)
- 用
replace函数移除元素中的单引号,直接得到纯0
XSLT 1.0 兼容版本
先移除所有单引号,再做截取,同时做边界兼容:
<!-- 先移除所有单引号 --> <xsl:variable name="noQuoteStr" select="translate($inputString, '''', '')" /> <!-- 取第一个逗号之后的内容 --> <xsl:variable name="afterFirstComma" select="substring-after($noQuoteStr, ',')" /> <!-- 判断是否存在第二个逗号 --> <xsl:choose> <xsl:when test="contains($afterFirstComma, ',')"> <xsl:value-of select="substring-before($afterFirstComma, ',')" /> </xsl:when> <xsl:otherwise> <xsl:value-of select="$afterFirstComma" /> </xsl:otherwise> </xsl:choose>
逻辑说明:
- 先通过
translate函数移除所有单引号,避免引号干扰截取逻辑 - 对只有两个值的场景做兼容,没有第二个逗号时直接返回第一个逗号后的全部内容
- 你给出的三个测试用例均可正确返回
0
内容的提问来源于stack exchange,提问作者MOz
相关产品推荐
相关产品推荐

