为xquery marklogic中的节点值赋值
我有一个xml格式的变量,如下所示为xquery marklogic中的节点值赋值,xquery,marklogic,Xquery,Marklogic,我有一个xml格式的变量,如下所示 let $node := <root><a/></root> 我想赋予价值 我使用的是marklogic 6,我想在marklogic的qconsole中运行这个xquery,这取决于您想对$node做什么,以及您首先从哪里获得$node的值,有几个选项。它基本上可以归结为内存更新或数据库更新 如果希望为其他查询保留更改,则数据库更新是有用的,但这涉及存储和从数据库检索内容。
let $node := <root><a/></root>
我想赋予价值
我使用的是marklogic 6,我想在marklogic的qconsole中运行这个xquery,这取决于您想对$node做什么,以及您首先从哪里获得$node的值,有几个选项。它基本上可以归结为内存更新或数据库更新 如果希望为其他查询保留更改,则数据库更新是有用的,但这涉及存储和从数据库检索内容。MarkLogic不支持XQuery更新语法,但它允许您存储内容。您可以使用诸如
xdmp:document insert
之类的函数来更新完整的文档,或者使用诸如xdmp:node insert child
之类的函数来操作存储在数据库中的文档
对于内存中的更新,必须手动重建节点树。您可以使用dirkk引用的内存更新库,也可以自己使用。一个简单的方法是:
let $node := <root><a/></root>
let $a-value := "a value"
return
<root><a>{$a-value}</a></root>
let$node:=
让$a-value:=“a值”
返回
{$a-value}
或者更一般地说:
let $node := <root><a/></root>
let $a-value := "a value"
return
element { node-name($node) } {
$node/@*,
for $child in $node/node()
return
typeswitch ($child)
case element(a) return
element { node-name($node) } {
$node/@*,
$a-value
}
default return $child
}
let$node:=
让$a-value:=“a值”
返回
元素{node name($node)}{
$node/@*,
对于$node/node()中的$child
返回
打字开关(儿童)
案例元素(a)返回
元素{node name($node)}{
$node/@*,
价值$a
}
默认返回$child
}
嗯 总体思路是将XML转换为所需的形状。在最简单的情况下,您可以硬编码所有内容:
let $node := <root><a/></root>
return <root><a>hello world</a></root>
let$node:=了解更多信息。我没有Marklogic方面的经验,但它不支持XQuery更新。以下内容可能与您有关:下面是Jim Fuller在
let $node := <root><a/></root>
let $value := "hello world"
return <root><a>{ $value }</a></root>
let $node := <root><a/></root>
let $value := "hello world"
return element { node-name($node) } {
<a>{ $value }</a>
}
let $node := <root><a/></root>
let $value := "hello world"
return element { node-name($node) } {
$node/@*,
for $n in $node/node() return typeswitch($n)
case element(a) return element { node-name($n) } { $n/@*, $value }
default return $n
}