我是Xquery的新手。 我正在开发一些我需要在现有XML中插入新XML元素的东西。
前:
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
需要通过添加新的元素地址来更新上述xml。
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
<address>Address</address>
</note>
这需要使用XQuery完成。
请告知。
答案 0 :(得分:4)
XQuery 1.0解决方案是使用递归typeswitch函数:
declare function local:insert-address($nodes as node()*)
{
for $node in $nodes
return
typeswitch($node)
case element(note)
return
element { name($node) } {
$node/@*,
local:insert-address($node/node()),
element address { "Address" }
}
case element()
return
element { name($node) } {
$node/@*,
local:insert-address($node/node())
}
default
return $node
};
let $doc :=
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
return
local:insert-address($doc)
根据您使用的XQuery引擎,如果您的处理器支持像Alexander Petrov的答案那样XQuery Update,或者像MarkLogic {{3}这样的自定义函数,可能会有更简单的解决方案。 }。
答案 1 :(得分:1)
试试这个:
copy $note :=
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
modify (insert node <address>Address</address> into $note)
return $note