XSLT新手问题:如何移除点分隔三段字符串的中间部分
移除点分隔三部分字符串的中间部分(XSLT实现)
嘿,作为XSLT新手遇到这种字符串处理问题太正常了!我给你两种简单易懂的方案,帮你快速得到想要的结果:
方法一:基础字符串函数组合(兼容XSLT 1.0及以上)
这种方法不依赖高版本XSLT,用substring-before和substring-after就能搞定,逻辑特别直观:
- 提取第一个点(
.)之前的内容 - 提取第二个点之后的内容
- 把两部分用点拼接起来
对应的XSLT代码示例:
<!-- 假设目标字符串在当前节点中,可替换成你的变量/节点路径 --> <xsl:value-of select="concat(substring-before(., '.'), '.', substring-after(substring-after(., '.'), '.'))" />
拿你的示例"2120.555.11111"来说:
substring-before(., '.')得到"2120"substring-after(substring-after(., '.'), '.')先取第一个点后的"555.11111",再提取它里面点后的"11111"- 最后通过
concat拼接成"2120.11111"
方法二:tokenize拆分法(XSLT 2.0及以上支持)
如果你的环境支持XSLT 2.0或更高版本,用tokenize拆分字符串会更清晰,可读性拉满:
- 把字符串按点(
.)拆分成一个序列(类似数组) - 直接取序列的第一个和第三个元素
- 用点拼接起来
对应的XSLT代码示例:
<xsl:variable name="split-parts" select="tokenize(., '\.')" /> <xsl:value-of select="concat($split-parts[1], '.', $split-parts[3])" />
这里tokenize(., '\.')会把"2120.555.11111"拆分成('2120', '555', '11111'),直接取第1和第3个元素拼接就搞定了。
小提示
如果没法保证输入一定是严格的三部分格式,可以加个简单判断避免出错:
<xsl:variable name="split-parts" select="tokenize(., '\.')" /> <xsl:if test="count($split-parts) = 3"> <xsl:value-of select="concat($split-parts[1], '.', $split-parts[3])" /> </xsl:if>
内容的提问来源于stack exchange,提问作者nullPointer
相关产品推荐
相关产品推荐

