0

我有两个 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,这正是我想要的。但是对于 2 号 Web 服务调用,提取器实际上得到的值为 0,这不是我想要的。我想在 Web 服务调用号 2 中得到的是 10203。我的问题是,为什么正则表达式提取器定义会返回两个不同的结果?


提前致谢,
蒙特

4

4 回答 4

3

如果您使用的匹配数为零,它将随机为您的正则表达式提取一个值。0 = 随机匹配,1 = 第一次匹配,2 = 第二次,等等...

于 2012-05-30T17:56:44.477 回答
2

看起来你已经在这里问过同样的问题了

  1. 使用正则表达式提取器XPath 提取器- 如上面的评论中所述,哪个更适合解析 xml, - 使用单个表达式 - (对于 RegEx Extractor: <data xsi:type="soapenc:string">(.+?)</data>,对于 XPath Extractor: //data/text()- 获取所有匹配项。
    然后使用相应的生成的变量来访问您需要的匹配 - 通过${refName_2}例如(访问通过查询提取到 refName 变量的第二个匹配),这对于 RegEx 和 XPath 提取器都是实际的, - 或者强制 RegEx 提取器默认使用特定匹配,通过设置“匹配号” .”(根据上面的示例到 2)。

  2. XPath Extractorxpath 查询一起使用,它将唯一地描述所需的值:通过固定位置 - 就像//data[position()=2]/text()在你的情况下(假设第一个匹配总是 0 并且你需要第二个), - 或按值 - 比较匹配的 text() 到0 喜欢//data[text()!=0]/text()

于 2012-05-30T20:48:29.460 回答
0

给定 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>

我们可以从以下格式的 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>
于 2014-11-28T07:26:28.597 回答
0

我对?你的正则表达式中的 :感到困惑(\d+?)。这意味着“一个或多个数字,但可选。”

鉴于您来自电话号码 1 和电话号码 2 的输入数据,我希望它在两种情况下都与第一行匹配<data xsi:type="soapenc:string">0</data>,但您说它不匹配。

我怀疑不想将数字与前导零匹配。所以我建议

Regular Expression: <data xsi:type="soapenc:string">([1-9]\d*)</data>
于 2012-05-30T17:58:00.670 回答