如何在Apache Synapse XQuery中介器中实现复杂的逻辑?

时间:2019-02-07 12:32:20

标签: wso2 wso2esb synapse

作为Apache Synapse中XQuery转换的一部分,我需要实现复杂的逻辑。我尝试了许多包含if / else语句的FLWOR构造。我认为这些应该可以工作(基于其他Stack Overflow XQuery答案),但是我从Synapse得到语法错误。例如:

{
  let   $s := $payload//int:FieldTag1510/int:SubTypeCode
  let   $t := $payload//int:FieldTag1510/int:TypeCode
  return 
     if ( $s/string() = '00' and $t/string() = '10') then
          return <Cd>CTR</Cd>
     else if ($s/string() = '00' and $t/string() = ('15', '16)') then
          return <Cd>BTR</Cd>
     else
          return  <Cd></Cd>
} 

我还尝试了多个“ where”语句:

{
   let   $s := $payload//int:FieldTag1510/int:SubTypeCode
   let   $t := $payload//int:FieldTag1510/int:TypeCode
   where ($s/string() = '00' and $t/string() = '10')
   return <Cd>CTR</Cd>
}
{
   where ($s/string() = '00' and $t/string() = ('15', '16')
   return <Cd>CTR</Cd>
}

使用多个FLWOR语句是可行的(下面的示例),但我真的想尽可能使用条件逻辑(因为我需要一个“ else”子句)。

{
   let   $s := $payload//int:FieldTag1510/int:SubTypeCode
   let   $t := $payload//int:FieldTag1510/int:TypeCode
   where $s/string() = '00' and $t/string() = '10'
   return 'CTR'
}
{
   let   $s := $payload//int:FieldTag1510/int:SubTypeCode
   let   $t := $payload//int:FieldTag1510/int:TypeCode
   where $s/string() = '00' and $t/string() = ('15', '16')
   return 'BTR'
}

在Synapse XQuery的return语句中是否允许“ if”语句?还是有更好的方法来实现这种逻辑?

0 个答案:

没有答案