我有两个WebService(SOAP)请求。两个Web服务调用的响应在结构上完全相同。对于Web服务呼叫号码1,它具有以下结构,
<data xsi:type="soapenc:string">0</data>
<data xsi:type="soapenc:string">650</data>
对于Web服务电话号码2,它具有以下结构,
<data xsi:type="soapenc:string">0</data>
<data xsi:type="soapenc:string">10203</data>
在每个调用中,我都有一个正则表达式提取器。参考名称不同;但一切都定义完全相同。提取器具有以下定义。
Apply to: Main Sample Only
Response Field to check: Body
Regular Expression: <data xsi:type="soapenc:string">(\d+?)</data>
Template: $1$
Match No.: 0
对于Web服务电话号码1,提取器获取值650,这就是我想要的。但对于Web服务调用号2,提取器实际上获取的值为0,这不是我想要的。我想在Web服务电话号码2中得到的是10203.我的问题是,为什么正则表达式提取器定义会返回两个不同的结果?
提前谢谢,
蒙
答案 0 :(得分:3)
如果您使用匹配数为零,则会随机为正则表达式提取值。 0 =随机匹配,1 =第一次匹配,2 =第二次等等......
答案 1 :(得分:2)
看起来你已经问过same question here。
使用Regular Expression Extractor或XPath Extractor - 哪个更适合解析xml,如上面的评论中所述, - 使用单个表达式 - (对于RegEx Extractor:{{1} },对于XPath Extractor:<data xsi:type="soapenc:string">(.+?)</data>
- 获取所有匹配项
然后使用相应的生成变量来访问您需要的匹配项 - 通过//data/text()
,例如(要查询通过查询提取的第二个匹配到refName变量),这对于RegEx和XPath Extractors都是实际的,或者通过设置“匹配号”强制RegEx Extractor默认使用特定匹配。 (如上例所示)。
将XPath Extractor与xpath query一起使用,它将在另一个中唯一地描述所需的值:按固定位置 - 在您的情况下类似${refName_2}
(假设第一场比赛始终为0且你需要第二个), - 或者通过值 - 比较匹配的文本()到0,如//data[position()=2]/text()
。
答案 2 :(得分:0)
我对你的正则表达式?
感到困惑:(\d+?)
。这意味着“一个或多个数字,但可选。”
根据来自电话号码1和电话号码2的输入数据,我希望它在两种情况下都匹配第一行<data xsi:type="soapenc:string">0</data>
,但你说它没有。{/ p>
我怀疑不想将数字与前导零相匹配。所以我建议
Regular Expression: <data xsi:type="soapenc:string">([1-9]\d*)</data>
答案 3 :(得分:0)
给定网络服务电话
对于网络服务电话号码1,它具有以下结构
<data xsi:type="soapenc:string">0</data>
<data xsi:type="soapenc:string">650</data>
对于Web服务电话号码2,它具有以下结构
<data xsi:type="soapenc:string">0</data>
<data xsi:type="soapenc:string">10203</data>
我们可以通过以下格式从Web服务呼叫号码1中提取值650
</data>\s\s<data xsi:type="soapenc:string">(.+)</data>
or
</data>\s\s<data xsi:type="soapenc:string">([0-9]+)</data>
我们可以通过以下格式从Web服务电话号码2中提取值10203
</data>\s\s<data xsi:type="soapenc:string">(.+)</data>
or
</data>\s\s<data xsi:type="soapenc:string">([0-9]+)</data>