Как вернуть несколько тегов внутри if / else, используя XQuery? - PullRequest
0 голосов
/ 29 октября 2018

Я должен сделать что-то вроде:

declare function xf:NameOfXQ($myIn as element(ns2:myIn))
    as element() {
        <ns0:tagIn>

            <myObj>
               {
                for $var in $myValueOfVar
                    return
                        if ($var= "X") then
                            <tagA>A</tagA>
                            <tagB>B</tagB>
                            <tagC>C</tagC>
                        else
                            <tagD>D</tagD>
                }
            </myObj>

        </ns0:tagIn>
};

Но когда xquery собирается, мой проект говорит: " Неверное выражение, ожидается ELSE, найдено '>' " Я пытаюсь использовать 4 IF, по одному для заполнения каждого тега, например:

declare function xf:NameOfXQ($myIn as element(ns2:myIn))
    as element() {
        <ns0:tagIn>

            <myObj>
            {
            for $var in $myValueOfVar
                return
                    if ($var= "X") then
                        <tagA>A</tagA>
                    else
                        ()
                    if ($var= "X") then
                        <tagB>B</tagB>
                    else
                        ()
                    if ($var= "X") then
                        <tagC>C</tagC>
                    else
                        ()
                    if ($var != "X") then
                        <tagD>D</tagD>
                    else
                        ()
            }
            </myObj>

        </ns0:tagIn>
};

Тогда мой проект говорит: " Неверное выражение: неожиданный токен: если " Как я могу сделать это правильно?

1 Ответ

0 голосов
/ 30 октября 2018

XQuery не считает несколько последовательных тегов синтаксически правильными, фрагмент XML должен иметь корневой тег, чтобы быть действительным.

Тем не менее, он позволяет вам использовать типы последовательностей с синтаксисом (item1, item2, ... itemN), который вы можете использовать, чтобы предложение return вашего выражения FLWOR давало несколько тегов XML:

for $var in $myValueOfVar
    return
        if ($var= "X") then
            (
                <tagA>A</tagA>,
                <tagB>B</tagB>,
                <tagC>C</tagC>
            )
        else
            <tagD>D</tagD>
...