0

2つの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です。私の質問は、正規表現エクストラクタ定義が2つの異なる結果を返すのはなぜですか。


よろしくお願いします、
モンテ

4

4 に答える 4

3

ゼロの一致番号を使用している場合は、正規表現の値がランダムに取得されます。0 =ランダム一致、1 =最初の一致、2=2番目など...

于 2012-05-30T17:56:44.477 に答える
2

ここですでに同じ質問をしているようです。

  1. 正規表現ExtractorまたはXPathExtractorのいずれかを使用します-上記のコメントで述べたように、xmlの解析にはどちらかがより望ましいです-単一の式で-(RegEx Extractorの場合:<data xsi:type="soapenc:string">(.+?)</data>、XPath Extractorの場合://data/text()-すべての一致を取得します。
    次に、対応するを使用します必要な一致にアクセスするために生成された変数-${refName_2}たとえば(refName変数へのクエリによって抽出された2番目の一致にアクセスするため)、これはRegExとXPath Extractorの両方で実際です-または、「Match No 。"(上記の例のように2に)。

  2. XPathExtractorxpathクエリで使用します。これは他の中で必要な値を一意に記述します:固定位置によって-//data[position()=2]/text()あなたの場合のように(最初の一致は常に0であり、2番目が必要であると仮定します)-または値によって-一致のtext()を比較します0のように//data[text()!=0]/text()

于 2012-05-30T20:48:29.460 に答える
0

私は?あなたの正規表現で困惑しています:(\d+?)。これは、「1桁以上、ただしオプション」を意味します。

呼び出し番号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 に答える
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 に答える