我使用迭代器和脚本调解器来计算学生的成绩总和.

我看到了这个问题,每次我收到0和的时候,你说总和不接受变量,注意和增量 例如,如果我将totalnote的值设置为16,则它是每一行的16和note的总和

我的目标是把这4个音符加起来

以下是我的代码

            <property name="totalnote" scope="default" type="INTEGER" value="0"/>
            <iterate expression="//etudiants/etudiant">
                <target>
                    <sequence>
                        <property expression="json-eval($.etudiant.note)" name="note" scope="default" type="INTEGER"/>
                        <log level="custom">
                            <property expression="get-property('note')" name="msg"/>
                        </log>
                        <script language="js"><![CDATA[{var i = parseInt(mc.getProperty("note")) ;
var totalnote = parseInt(mc.getProperty("totalnote")) ;         
var totalnote = totalnote + i;
totalnote=totalnote.toString();
mc.setProperty("totalnote", totalnote);}]]></script>
                        <log level="custom">
                            <property expression="get-property('totalnote')" name="ms"/>
                        </log>
                    </sequence>
                </target>
            </iterate>
            <respond/>
        </inSequence>
        <outSequence/>
        <faultSequence/>
    </resource>
</api>

我收到的结果是:

[2022-12-01 10:04:40,450]  INFO {LogMediator} - {api:student} msg = 13
[2022-12-01 10:04:40,450]  INFO {LogMediator} - {api:student} msg = 15
[2022-12-01 10:04:40,450]  INFO {LogMediator} - {api:student} msg = 16
[2022-12-01 10:04:40,450]  INFO {LogMediator} - {api:student} msg = 17
[2022-12-01 10:04:40,469]  INFO {LogMediator} - {api:student} ms = 17
[2022-12-01 10:04:40,469]  INFO {LogMediator} - {api:student} ms = 13
[2022-12-01 10:04:40,469]  INFO {LogMediator} - {api:student} ms = 15
[2022-12-01 10:04:40,469]  INFO {LogMediator} - {api:student} ms = 16

推荐答案

如果您只需要获得所有学生的note的总和,则只需使用以下XPath表达式,

<property expression="sum(//etudiants/etudiant/note[number(.) = number(.)])" name="totalnote" scope="default" type="STRING"/>

根据您的有效载荷,您可能需要更新表达式.在这里,我假设了如下有效载荷,

{
  "etudiants": {
    "etudiant": [
      {
        "note": 17
      },
      {
        "note": 13
      }
    ]
  }
}

如果您想从每次迭代中进行后端调用,则应该使用iterate mediator.在这里,对于每一次迭代,都会创建一条新消息,您需要在Aggregate mediator之前收集它们.

如果您只想迭代有效负载,则可以使用ForEach Mediator.ForEach Mediator还支持修改原始有效负载.

更多信息:https://apim.docs.wso2.com/en/latest/reference/mediators/iterate-mediator/

Javascript相关问答推荐

切换时排序对象数组,切换不起作用

setcallback是什么时候放到macrotask队列上的?

如何将Cookie从服务器发送到用户浏览器

Javascript json定制

是什么导致了这种奇怪的水平间距错误(?)当通过JavaScript将列表项元素追加到无序列表时,是否在按钮之间?

类构造函数忽略Reaction Native中的可选字段,但在浏览器中按预期工作

Phaserjs-创建带有层纹理的精灵层以自定义外观

如果没有页面重新加载Angular ,innerHTML属性绑定不会更新

为什么延迟在我的laravel项目中不起作用?

在Java脚本中录制视频后看不到曲目

如何在脚本编译后直接将RxJ模块导入浏览器(无需Angel、webpack、LiteServer)

如何在TransformControls模式下只保留箭头进行翻译?

JQuery使用选项填充HTMLSELECT并设置默认结果,默认结果显示为空

使用jQuery每隔几秒钟突出显示列表中的不同单词

在Reaction Native中,ScrolltoIndex在结束时不一致地返回到索引0

如何在单击Search按钮时更新Reaction组件?

将数据对象代码中缺失的属性添加到单个对象不起作用

阻止Electron 打开多个应用程序实例

将文本复制到循环结果

从Java到Java的Port Inn代码验证