将变量传递给 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
。
我需要使用 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
。