将变量传递给 xdmp:eval Marklogic Xquery

Passing variable to xdmp:eval Marklogic Xquery

我需要使用 xquery 将参数传递给 xdmp:eval:

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

但我得到 Undefined variable $uri

出于多种原因,我需要使用 xdmp:eval 执行此操作,有人知道如何在 xquery 中执行此操作吗?

当您评估该字符串时,它没有上下文知道 $uri 值应该是什么。 您可以在调用时在第二个参数中传递这些上下文值:

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

但是你应该考虑使用 xdmp:invoke-function() 来代替匿名函数:

let $uri := "/tmp/myDoc.csv"
xdmp:invoke-function(function(){ fn:doc($uri) }, 
  <options xmlns="xdmp:eval">
    <database>{xdmp:database("My-Database")}</database>
  </options>
)

is generally easier and safer 使用 xdmp:invoke-function