Как реализовать сложную логику в посреднике Apache Synapse XQuery? - PullRequest
0 голосов
/ 07 февраля 2019

В рамках преобразования XQuery в Apache Synapse мне необходимо реализовать сложную логику.Я пробовал несколько конструкций FLWOR, которые включают операторы if / else.Я думаю, что они должны работать (основываясь на других ответах 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'
}

Разрешены ли операторы "if" в операторах возврата в Synapse XQuery?Или есть лучший способ реализовать эту логику?

...