我有来自服务器(SOAP)的XML响应,并且我在其中获得了多个值。 XPath提取所有值并在内部存储它们,如Match_1,Match_2,Match_3等。
但我既不能通过BSF Post Processor也不能通过粘贴在XML中的JavaScript代码访问它们。它只是拒绝返回值,然后我这样说:${Match_1}
。
示例:
响应返回多个contentGroupID
值
Debug Sampler显示它们:
我们需要在下一个请求中使用这些值中的每一个,因此我们在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 Post Processor并在XML中添加变量,情况也是如此。
问题是:如何才能获取这些神奇的价值?
P.S。一切都很好,然后我使用ForEach控制器。但问题是我需要对所有值进行单一请求,而不是一个接一个地发出多个请求。
答案 0 :(得分: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}变量。
故事结束! =)