小编Jen*_*sen的帖子

递归地包装元素

假设我有一个元素<x>x</x>和一些空元素(<a/>, <b/>, <c/>),我想一次包装第二个内部的第一个元素,结果<c><b><a><x>x</x></a></b></c>.当我不知道空元素的数量时,我该怎么做呢?

我可以

xquery version "3.0";

declare function local:wrap-up($inner-element as element(), $outer-elements as element()+) as element()+ {
    if (count($outer-elements) eq 3)
    then element{node-name($outer-elements[3])}{element{node-name($outer-elements[2])}{element{node-name($outer-elements[1])}{$inner-element}}}
    else 
        if (count($outer-elements) eq 2)
        then element{node-name($outer-elements[2])}{element{node-name($outer-elements[1])}{$inner-element}}
        else
            if (count($outer-elements) eq 1)
            then element{node-name($outer-elements[1])}{$inner-element}
            else ($outer-elements, $inner-element)
};

let $inner-element := <x>x</x>
let $outer-elements := (<a/>, <b/>, <c/>)

return 
    local:wrap-up($inner-element, $outer-elements)
Run Code Online (Sandbox Code Playgroud)

但有没有办法通过递归来做到这一点,而不是降序和解析,而是提升和构建?

recursion xquery xquery-3.0

4
推荐指数
1
解决办法
43
查看次数

标签 统计

recursion ×1

xquery ×1

xquery-3.0 ×1