Passing Variable to Xdmp: Eval Marklogic Xquery
I Need to Pass an Argument into an Xdmp: Eval with Xquery: Let $Uri: ="/Tmp/myDoc. Csv" Let $Doc: = Xdmp: Eval('Fn: Doc($Uri)', (), {Xdmp...
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 $doc
But 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 ?
1 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 $doc
But 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.