xdmp:value( $expr as xs:string, [$map as map:map?], [$context as item()?] ) as item()*
Evaluate an expression in the context of the current evaluating statement.
This differs from xdmp:eval
in that xdmp:value
preserves all of the context from the calling query, so you do not
need to re-define namespaces, variables, and so on. Although the expression
retains the context from the calling query, it is evaluated in its own
transaction with same-statement isolation.
http://marklogic.com/xdmp/privileges/xdmp-value
You can only evaluate expressions with xdmp:value
; no
prolog definitions (namespace declarations, function definitions,
module imports, and so on) are allowed.
If the expression references something not in the context of either the calling query or the value expression, then an error is thrown. For example, the following throws an undefined variable exception:
xdmp:value("$y")
It is not recommended to use this with an inline function as static analysis of
inline functions do not look inside strings passed to xdmp:value
.
let $var := 5 return xdmp:value("$var") => 5
xquery version "1.0-ml"; xdmp:document-insert("/test.xml", <root> <step1>this is step1</step1> <step2>this is step2</step2> </root>) ; (: use xdmp:value to dynamically specify a step in an XPath expression :) for $x in ("step1", "step2") return /root/xdmp:value($x) => <step1>this is step1</step1> <step2>this is step2</step2>