如何使用XQuery在if / else中返回多个标签?

时间:2018-10-29 13:11:41

标签: xquery

我必须做类似的事情:

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 :(得分:2)

XQuery在语法上不认为多个连续的标签正确,XML片段必须具有一个根标签才有效。

但是,它允许您使用语法为(item1, item2, ... itemN)的序列类型,可以使FLWOR表达式的return子句产生多个XML标签:

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