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

XPath表达式分词问题求助:无法处理谓词含斜杠的表达式

解决方案思路

1. 用状态机跟踪谓词上下文

不能简单按/分割,必须跟踪当前是否处于谓词内部([]包裹的区域):

  • 定义两种状态:OUTSIDE_PREDICATE(初始状态)和INSIDE_PREDICATE
  • 遍历字符串每个字符:
    • 遇到[时切换到INSIDE_PREDICATE,此时忽略/的分隔作用
    • 遇到]时切回OUTSIDE_PREDICATE
    • 仅在OUTSIDE_PREDICATE状态下,/才作为分隔符切割token

2. 手动切割字符串,替代strsep的简单分割

放弃strsep自动分割,手动遍历维护token起始位置:

  • 初始化start指向字符串首地址
  • 逐个字符遍历:
    • 处于OUTSIDE_PREDICATE且当前字符是/时,截取start到当前字符前的内容作为一个token(跳过空token,比如开头的/)
    • 更新start为当前字符的下一个地址
  • 遍历结束后,处理最后一段从start到末尾的token

3. 构建节点+谓词的结构化存储

分词完成后,将每个token拆分为节点名和谓词列表:

  • 提取节点名:从token开头到第一个[的部分(如employee)
  • 提取谓词:遍历token中的[和]配对,将每个[]内的内容作为独立谓词项(如secret-code=a/b/c、unicode=d/e/f)
  • 可定义结构体存储:
    typedef struct {
        char *node_name;
        char **predicates; // 动态数组存储谓词字符串
        int predicate_count;
    } XPathNode;
    

4. 处理边界情况

  • 开头的/:标记为绝对路径,跳过空token
  • 嵌套谓词(若需兼容):用计数器跟踪,[计数+1,]计数-1,仅当计数为0时才视为谓词结束
  • 空谓词(如employee[]):按需做合法性校验或特殊处理

内容的提问来源于stack exchange,提问作者Ram P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:32:51