我是 Xquery 的新手。我正在处理一些需要将新的 XML 元素插入到现有 XML 中的事情。
前任:
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
Run Code Online (Sandbox Code Playgroud)
上面的 xml 需要通过添加新的 Element 地址来更新。
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
<address>Address</address>
</note>
Run Code Online (Sandbox Code Playgroud)
这需要使用 XQuery 来完成。
请指教。
XQuery 1.0 解决方案是使用递归类型切换函数:
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)
Run Code Online (Sandbox Code Playgroud)
根据您使用的 XQuery 引擎,如果您的处理器支持XQuery Update(如 Alexander Petrov 的答案)或自定义函数(如 MarkLogic 的xdmp:node-insert-child() ),则可能有更简单的解决方案。
| 归档时间: |
|
| 查看次数: |
3484 次 |
| 最近记录: |