XPath日期对比问题:表达式失效,需对比Name子串与Time标签值
修复XPath日期对比表达式的方法
核心问题
需要从<Name>标签内容中提取末尾8位日期子串(如26052024),与<Time>标签的日期值做对比,但原表达式无法正常工作。
原表达式失效的常见原因及修复方案
节点路径大小写不匹配
XML标签是大小写敏感的,原表达式中/timeInfo/time如果对应XML里的<Time>标签,必须修正为/timeInfo/Time,否则无法定位到目标节点。substring起始位置计算错误
XPath的substring函数起始位置从1开始计数。如果目标日期是<Name>内容的最后8位,起始位置应该是string-length(/ProcessData/ListInfo/Name) - 7(总长度减7,取后续8位),原表达式的-17明显计算偏差,需要根据<Name>的实际格式调整。未处理空白字符
如果<Name>或<Time>标签内容存在前后空格、换行符,会导致字符串对比失败,需用normalize-space()统一处理空白。
修正后的表达式示例
normalize-space(substring(/ProcessData/ListInfo/Name, string-length(/ProcessData/ListInfo/Name) - 7, 8)) != normalize-space(/timeInfo/Time)
验证步骤
- 先单独测试
substring部分,确认是否能正确提取日期:substring(/ProcessData/ListInfo/Name, string-length(/ProcessData/ListInfo/Name) - 7, 8) - 再单独查看
<Time>标签的实际值:normalize-space(/timeInfo/Time) - 确认两部分输出一致后,再进行对比判断。
内容的提问来源于stack exchange,提问作者Rodrigo Perez Memije
相关产品推荐
相关产品推荐

