Avoiding redeclaration for transactions in Xquery -
given:
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);
how can avoid having redeclare $name?
using separate transactions i'm not sure there nice way this. can declare variable external. still have declared multiple times, have assign once when called via xdmp:invoke
(or xdmp:eval
):
declare variable $name xs:string external ; xdmp:node-delete(doc(concat('/', $name, '.xml'))//foo); declare variable $name xs:string external ; xdmp:node-delete(doc(concat('/', $name, '.xml'))//bar); declare variable $name xs:string external ; xdmp:node-delete(doc(concat('/', $name, '.xml'))//baz);
then can call module multiple times using invoke
different values:
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'))
if don't want module, wrap in function accepts $name
param , uses xdmp:eval
instead.
Comments
Post a Comment