鉴于:
let $name := '751-1500'
return xdmp:node-delete(doc(concat('/', $name, '.xml'))//foo);
let $name := '751-1500'
return xdmp:node-delete(doc(concat('/', $name, '.xml'))//bar);
let $name := '751-1500'
return xdmp:node-delete(doc(concat('/', $name, '.xml'))//baz);
如何避免重新声明$ name?
答案 0 :(得分:3)
在一次交易中,有更简单的方法,但这应该有效(未经测试)
let $name := '751-1500'
let $doc := doc(concat('/', $name, '.xml'))
return
(xdmp:node-delete($doc//foo),
xdmp:node-delete($doc//bar),
xdmp:node-delete($doc//baz))
答案 1 :(得分:1)
使用单独的交易我不确定有一个很好的方法来做到这一点。但是您可以将变量声明为外部变量。它仍然需要多次声明,但您只需在通过xdmp:invoke
(或xdmp:eval
)调用时分配一次:
declare variable $name as xs:string external ;
xdmp:node-delete(doc(concat('/', $name, '.xml'))//foo);
declare variable $name as xs:string external ;
xdmp:node-delete(doc(concat('/', $name, '.xml'))//bar);
declare variable $name as xs:string external ;
xdmp:node-delete(doc(concat('/', $name, '.xml'))//baz);
然后,您可以使用具有不同值的invoke
多次调用此模块:
xdmp:invoke('delete-nodes.xqy', (xs:QName('name'), '751-1500')),
xdmp:invoke('delete-nodes.xqy', (xs:QName('name'), '751-1501')),
xdmp:invoke('delete-nodes.xqy', (xs:QName('name'), '751-1502'))
如果您不想要额外的模块,可以将其全部包含在接受$name
参数的函数中,然后使用xdmp:eval
。