如何重建元素,添加元素

时间:2014-06-05 15:36:35

标签: xquery

这是我想要重建的元素:

<element>
    <1></1>
    <2></2>
    <3>
        <3a>
            <3a1>
            </3a1>
        </3a>
    </3>
</element>

我想在<4>结尾之前添加一个元素(<element>)。这就是我的尝试:

 return <element> element/*, <4>data</4> </element>

但我得到的是<4>插入如下:

<element>
    <1></1>
    <2></2>
    <3>
        <3a>
            <3a1>
                **<4>data</4>**
            </3a1>
        </3a>
    </3>
</element>

我如何实现这一目标:

<element>
    <1></1>
    <2></2>
    <3>
        <3a>
            <3a1>
            </3a1>
        </3a>
    </3>
    <4>data</4>
</element>

1 个答案:

答案 0 :(得分:1)

您可以按以下方式插入额外元素:

xquery version "3.0";

declare function local:insert-as-last-child($node as node(), $new-content as node()) as node() {
     element {node-name($node)}
                {
                $node/@*
                ,
                for $child in $node/node()
                    return $child
                ,
                $new-content
                }
};

let $input :=
<elements>
    <element-1/>
    <element-2/>
    <element-3>
        <element-3a>
            <element-3aelement-1> </element-3aelement-1>
        </element-3a>
    </element-3>
</elements>

return 
    local:insert-as-last-child($input, <element-4>data</element-4>)    xquery version "3.0";

declare function local:insert-as-last-child($node as node(), $new-content as node()) as node() {
     element {node-name($node)}
                {
                $node/@*
                ,
                for $child in $node/node()
                    return $child
                ,
                $new-content
                }
};

let $input :=
<elements>
    <element-1/>
    <element-2/>
    <element-3>
        <element-3a>
            <element-3aelement-1> </element-3aelement-1>
        </element-3a>
    </element-3>
</elements>

return 
    local:insert-as-last-child($input, <element-4>data</element-4>)

有关更多选项,请参阅XQuery Wikibook