I need to pass an argument into an xdmp:eval with xquery:
let $uri :="/tmp/myDoc.csv"
let $doc:= xdmp:eval('fn:doc($uri)' , (), <options xmlns="xdmp:eval"><database>{xdmp:database("My-Database")}</database></options>)
return $docBut i'm getting Undefined variable $uri
I need to do this with an xdmp:eval for many reasons, have any one any idea how to do this in xquery ?
31 Answer
When you eval that string, it has no context to know that the $uri value should be.
You can pass those context values in the second parameter when you invoke:
let $uri :="/tmp/myDoc.csv"
let $doc:= xdmp:eval('fn:doc($uri)', (xs:QName("uri"), $uri), <options xmlns="xdmp:eval"> <database>{xdmp:database("My-Database")}</database> </options>)
return $docBut you should consider using xdmp:invoke-function() instead, with the anonymous function:
let $uri := "/tmp/myDoc.csv"
xdmp:invoke-function(function(){ fn:doc($uri) }, <options xmlns="xdmp:eval"> <database>{xdmp:database("My-Database")}</database> </options>
)It is generally easier and safer to use xdmp:invoke-function.