0

我有一个来自服务器 (SOAP) 的 XML 响应,并且我在其中得到了多个值。XPath 提取所有值并将它们存储在内部,如 Match_1、Match_2、Match_3 等。但我既不能通过 BSF 后处理器也不能通过粘贴在 XML 中的 JavaScript 代码访问它们。它只是拒绝返回值,然后我这样称呼他们:${Match_1}.

例子:

响应返回多个contentGroupID值。
调试采样器揭示了它们:

  • 内容组 ID=67
  • contentGroupID_1=67
  • contentGroupID_2=50
  • contentGroupID_3=38
  • contentGroupID_4=54
  • contentGroupID_5=46

我们需要在下一个请求中使用这些值中的每一个,因此我们在 XML 中添加一个代码来放置我们需要这些值的位置:

${__javaScript
(myOutput =''; var names = {};
for (var i = 1; i <= ${contentGroupID_matchNr}; i++) 
{names[i] = "${contentGroupID_" + i + "}";}
for (var j = 1; j <= ${contentGroupID_matchNr}; j++) 
{myOutput = 
myOutput + '<ns8:forContentGroupId><ns2:id>' + names[j] + '</ns2:id></ns8:forContentGroupId>';},
myOutput)
}

在这里,我们放置 XML 的部分,其值<ns8:forContentGroupId><ns2:id>' + ids + '</ns2:id></ns8:forContentGroupId>与 XPath 找到的匹配次数一样多。

但魔法并没有发生。请求发送如下:

<ns8:forContentGroupId><ns2:id>${contentGroupID_1}</ns2:id></ns8:forContentGroupId>
<ns8:forContentGroupId><ns2:id>${contentGroupID_2}</ns2:id></ns8:forContentGroupId>
<ns8:forContentGroupId><ns2:id>${contentGroupID_3}</ns2:id></ns8:forContentGroupId>
<ns8:forContentGroupId><ns2:id>${contentGroupID_4}</ns2:id></ns8:forContentGroupId>
<ns8:forContentGroupId><ns2:id>${contentGroupID_5}</ns2:id></ns8:forContentGroupId>

如果我使用 JavaScript 代码设置 BSF 后处理器并在 XML 中添加变量,也会发生同样的情况。

问题是:一个人怎么能获得这些神奇的价值?

PS 一切都很好,然后我使用 ForEach 控制器。但诀窍是我需要对所有值发出单个请求,而不是一个接一个地发出多个请求。

4

1 回答 1

0

在这里找到解决方案:

BSF 后处理器女巫 JavaScript 代码:

var myOutput = '';
var names = {};
var str;
var value = 0;
var match = vars.get("contentGroupID_matchNr");
for (var i = 1; i <= match; i++) 
{
var n = i.toString();
str = 'contentGroupID_' + n;
value = vars.get(str);
names[i] = value;
}

for (var j = 1; j <= match; j++) {
myOutput = myOutput +  '<ns8:forContentGroupId><ns2:id>' + names[j] + '</ns2:id></ns8:forContentGroupId>';
}
vars.put("array", myOutput);

加上 XML 中的 ${array} 变量。

故事结局!=)

于 2013-06-27T13:41:40.603 回答