You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用XPath 1.0提取XML中冒号分隔串最后组的中间数字

XPath 1.0提取最后一组数字的中间值解决方案

给定XML文档:

<a>
    <b> 1,2,3 : 4,5,6 : 7,8,9 : 10,11,12 </b>
</a>

标签内的内容以:(空格+冒号+空格)为分隔符,包含1-10组逗号分隔的数字,需用XPath 1.0提取最后一组的中间值(示例中为11)。

由于XPath 1.0没有字符串分割、反转这类高级函数,只能通过嵌套substring-after、substring-before和normalize-space实现,以下是可行方案:

完整表达式

substring-before(substring-after(
  normalize-space(
    if (substring-after(substring-after(substring-after(substring-after(substring-after(substring-after(substring-after(substring-after(substring-after(/a/b," : ")," : ")," : ")," : ")," : ")," : ")," : ")," : ")," : ")," : ") != '' then
      substring-after(substring-after(substring-after(substring-after(substring-after(substring-after(substring-after(substring-after(substring-after(/a/b," : ")," : ")," : ")," : ")," : ")," : ")," : ")," : ")," : ")," : ")
    else if (substring-after(substring-after(substring-after(substring-after(substring-after(substring-after(substring-after(substring-after(/a/b," : ")," : ")," : ")," : ")," : ")," : ")," : ")," : ") != '' then
      substring-after(substring-after(substring-after(substring-after(substring-after(substring-after(substring-after(substring-after(/a/b," : ")," : ")," : ")," : ")," : ")," : ")," : ")," : ")
    else if (substring-after(substring-after(substring-after(substring-after(substring-after(substring-after(substring-after(/a/b," : ")," : ")," : ")," : ")," : ")," : ")," : ") != '' then
      substring-after(substring-after(substring-after(substring-after(substring-after(substring-after(substring-after(/a/b," : ")," : ")," : ")," : ")," : ")," : ")," : ")
    else if (substring-after(substring-after(substring-after(substring-after(substring-after(substring-after(/a/b," : ")," : ")," : ")," : ")," : ")," : ") != '' then
      substring-after(substring-after(substring-after(substring-after(substring-after(substring-after(/a/b," : ")," : ")," : ")," : ")," : ")," : ")
    else if (substring-after(substring-after(substring-after(substring-after(substring-after(/a/b," : ")," : ")," : ")," : ")," : ") != '' then
      substring-after(substring-after(substring-after(substring-after(substring-after(/a/b," : ")," : ")," : ")," : ")," : ")
    else if (substring-after(substring-after(substring-after(substring-after(/a/b," : ")," : ")," : ")," : ") != '' then
      substring-after(substring-after(substring-after(substring-after(/a/b," : ")," : ")," : ")," : ")
    else if (substring-after(substring-after(substring-after(/a/b," : ")," : ")," : ") != '' then
      substring-after(substring-after(substring-after(/a/b," : ")," : ")," : ")
    else if (substring-after(substring-after(/a/b," : ")," : ") != '' then
      substring-after(substring-after(/a/b," : ")," : ")
    else if (substring-after(/a/b," : ") != '' then
      substring-after(/a/b," : ")
    else
      /a/b
  ),
  ","),
  ","
)

逻辑说明

  1. 提取最后一组数字:通过嵌套9次substring-after并逐层判断结果是否为空,覆盖1-10组的所有情况,用normalize-space去除前后空格,避免干扰后续分割。
  2. 提取中间值:对最后一组(格式为X,Y,Z),先用substring-after获取逗号后的部分,再用substring-before截取第二个逗号前的内容,得到中间数字。

内容的提问来源于stack exchange,提问作者Crystal Jr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 09:36:02