Wiremock使用matchesXPath匹配字符串值时匹配失败问题咨询
错误原因
你在字符串匹配时没有显式提取XML节点的文本值,直接将v1:Transaction节点对象与字符串做等值对比。XPath对数值类型的隐式转换兼容性更好,所以匹配数字1的时候可以正常生效,但字符串对比时需要明确指定对比节点的文本内容,否则会因为类型不匹配导致匹配失败。另外XML格式化时产生的缩进、换行等隐形空白字符,也会导致直接对比节点时匹配失败。
补充说明:你贴出的配置片段缺少JSON对象和数组的闭合符号,实际使用时需要补全,否则会先出现JSON解析错误。
修复方案
推荐使用normalize-space()函数处理节点内容,自动消除空白字符的影响,修正后的配置如下:
"bodyPatterns": [{ "matchesXPath" : "//ipgapi:IPGApiOrderRequest[normalize-space(./v1:Transaction)='abc']", "xPathNamespaces": { "ipgapi": "http://ipg/ipgapi", "v1": "http://ipg/v1" } }]
如果你确定节点内容没有多余空白,也可以直接提取文本值对比:
"bodyPatterns": [{ "matchesXPath" : "//ipgapi:IPGApiOrderRequest[./v1:Transaction/text()='abc']", "xPathNamespaces": { "ipgapi": "http://ipg/ipgapi", "v1": "http://ipg/v1" } }]
内容的提问来源于stack exchange,提问作者Tan Jin Peng
相关产品推荐
相关产品推荐

