这是一个转换实例,我们先来说明一下任务要求: 入参参数: canshu1:你好 canshu2:我好 canshu3:大家好 入参后获取的出参: <message> <info> <result>1,成功</result> <infomx> <id>1</id> </infomx> <infomx> <id>2</id> </infomx> <infomx> <id>3</id> </infomx> </info> …… </message> 难点要求: Infomx为不确定个数,即id为多个,同时参数也刚好和id相同多,该实例是以数量3个为例,当然这个3我是不当做知道的。
上图是一个整的流程,在最后一步前都是为了得到一个正常的入参,不算在我们的处理中,功能上呢也说明下吧,第一步是设置参数(正常情况一般是从入参里获取),之后的JavaSprict是拼接一个入参,Character Encoding Translator则是将GBK转为UTF-8,最后一个JavaSprict是对出参的一个处理。 代码如下: var count = next.getRepeatCount('/message/info/infomx'); log.info(count); for(vari=1;i<=count;i++) { next.setField('/message/info/infomx['+i+']/id',next.getProperty('canshu'+i)); }
由于id未知,所以我们先要确定有几个id的数据,那么代码里我们通过infomx这个节点来统计,id数(多数情况下一个节点的数据字段往往不止一个),count这个参数统计了节点数量,也是这里id的数量,获取数量就可以通过循环来添加内容了,这里选择了for循环,功能语句是通过对第i个infomx节点下的id元素setField,替换的内容是通过getProperty得来的参数。
最后附上服务调用获得的出参图
|