В рамках преобразования 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?Или есть лучший способ реализовать эту логику?