Karate XML断言如何迭代匹配coordinates属性的坐标对正则规则
解决方法
方案1:迭代校验每个坐标对(推荐,定位问题更清晰)
Karate完全支持拆分坐标内容后逐组校验,步骤如下:
- 先提取所有
coordinates节点的文本,去除前后空白后按单空格拆分得到坐标对数组 - 用修正后的正则对每个坐标对单独校验
示例代码:
# 提取所有coordinates节点内容 * def coordNodes = get $xmlData1/LinearRing/coordinates # 修正后的单坐标对正则,支持正负整数、小数 * def singleCoordRegex = /^(-?\d+\.?\d*),(-?\d+\.?\d*)$/ * each coordText in coordNodes """ # 去除前后空白后按单个空格拆分坐标对 * def coordPairs = coordText.trim().split(' ') # 逐组校验坐标对格式 * match each coordPairs == '#regex singleCoordRegex' """
方案2:调整正则直接整串匹配(符合单空格间隔要求)
如果需要直接对整个coordinates文本做一次性校验,要求坐标对之间仅允许1个空格的话,可使用以下正则,覆盖前导/后导空白、多组坐标对+单空格间隔的逻辑:
* def fullCoordRegex = /^\s*(-?\d+\.?\d*,-?\d+\.?\d*)( (-?\d+\.?\d*,-?\d+\.?\d*))*\s*$/ * match each $xmlData1/LinearRing/coordinates == '#regex fullCoordRegex'
之前匹配失败的原因说明
- 原正则第一个数字分组
(-?\d?)仅支持最多1位数字,无法匹配46.8、-46.2000这类多位整数的坐标值,修正为(-?\d+\.?\d*)即可匹配多位正负数值 - 仅添加
\s?只能处理单个可选空白,没有覆盖多组坐标对重复出现的逻辑,整串匹配需要兼容多组坐标+间隔的组合规则
内容的提问来源于stack exchange,提问作者Dhamo
相关产品推荐
相关产品推荐

