На этот вопрос сложно ответить, потому что я не могу продублировать вашу проблему (я не могу легко заставить ваш код работать вообще).Я также не использовал «oracle osb», поэтому я не уверен, что это сильно поможет.
Я смог выполнить то, что, как мне кажется, вы пытаетесь сделать, используя следующееXQuery.(Мой процессор - Saxon-HE XQuery 9.3.0.4. Мне не нужно использовать префиксы fn:
для функций, но, возможно, вы используете в Oracle?)
XQuery :
declare namespace stan = "http://notsurewhatthisis.com/stan";
let $qt := '"TEST"'
let $newQt := replace($qt,'"','\\"')
let $query :=
if ($qt != '')
then
if (contains($qt,'"'))
then
<stan:query>
<stan:queryTerm type="phrase">{concat('string("',$newQt,'", mode="phrase", annotation_class="user")')}</stan:queryTerm>
<stan:mode>RAW</stan:mode>
</stan:query>
else
<stan:query>
<stan:queryTerm type="phrase">{concat('string("',$newQt,'", mode="simpleany", annotation_class="user")')}</stan:queryTerm>
<stan:mode>RAW</stan:mode>
</stan:query>
else
<stan:query>
<stan:queryTerm>{$newQt}</stan:queryTerm>
<stan:mode>AND</stan:mode>
</stan:query>
return
$query
выход :
<stan:query xmlns:stan="http://notsurewhatthisis.com/stan">
<stan:queryTerm type="phrase">string("\"TEST\"", mode="phrase", annotation_class="user")</stan:queryTerm>
<stan:mode>RAW</stan:mode>
</stan:query>
выход (после изменения $qt
на let $qt := 'TEST'
):
<stan:query xmlns:stan="http://notsurewhatthisis.com/stan">
<stan:queryTerm type="phrase">string("TEST", mode="simpleany", annotation_class="user")</stan:queryTerm>
<stan:mode>RAW</stan:mode>
</stan:query>
output (после изменения $qt
на let $qt := ''
, что и будет if ($qt != "") then)
, которое вы поймаете):
<stan:query xmlns:stan="http://notsurewhatthisis.com/stan">
<stan:queryTerm/>
<stan:mode>AND</stan:mode>
</stan:query>
Надеюсь, это как-то поможет.