Xquery 如何重建元素,添加元素

Xquery 如何重建元素,添加元素,xquery,Xquery,以下是我要重建的元素: <element> <1></1> <2></2> <3> <3a> <3a1> </3a1> </3a> </3> </element> 我想在结尾之前添加一个元素()。这就是我尝试过的: return <

以下是我要重建的元素:

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

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

 return <element> element/*, <4>data</4> </element>
返回元素/*,数据
但我得到的是插入的
,如下所示:

<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>

数据

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

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版本“3.0”;
将函数声明为本地:作为最后一个子节点插入($node as node(),$new content as node())作为节点(){
元素{node name($node)}
{
$node/@*
,
对于$node/node()中的$child
返回$child
,
$newcontent
}
};
让$input:=
返回
本地:作为最后一个子项插入($input,data)xquery版本“3.0”;
将函数声明为本地:作为最后一个子节点插入($node as node(),$new content as node())作为节点(){
元素{node name($node)}
{
$node/@*
,
对于$node/node()中的$child
返回$child
,
$newcontent
}
};
让$input:=
返回
本地:作为最后一个子项插入($input,data)

有关更多选项,请参阅。

FYI要使XML有效,元素名称必须是有效的QNames,不能以数字开头。此外,假设这是有效的,您在此处提供的代码应该会返回预期的输出,因此我怀疑您的示例没有反映问题。@wst,要使XML有效,它需要DTD或架构(此处不提供)–如果没有它,则可能是格式良好的。@OP:您尝试过什么,您可以使用XQuery Update,还是必须重新构造元素?@JensErat(带或不带schema/DTD),元素名称必须是有效的QName。此外,使用此处提供的代码无法获得OP建议的输出……这个问题显然缺少某些内容。