寻找xdmp:value()vs xdmp:eval()之间的区别

时间:2015-12-23 21:40:59

标签: xpath xquery marklogic marklogic-8

有人可以更好地解释xdmp:eval()xdmp:value()函数吗?

我曾尝试使用Developer API。但是,我对这些实例并不满意,对我来说这有点模糊。如果有人能够帮助我理解这些功能以及它们与示例的区别,我将非常感激。

1 个答案:

答案 0 :(得分:4)

这两个函数用于动态执行代码字符串,但xdmp:value是针对当前上下文进行评估的,这样如果您在当前作用域中声明了变量或声明了模块,则可以在不重新声明它们的情况下引用它们。 / p>

xdmp:eval需要创建一个全新的上下文,它不了解调用xdmp:eval的上下文。必须定义一个新的XQuery prolog,并将主上下文中的变量作为参数传递给xdmp:eval调用,并在eval脚本中声明为外部变量。

一般来说,如果你可以使用xdmp:value,它可能是最好的选择;但是,xdmp:eval具有xdmp:value没有的一些功能,即<options>参数中定义的所有功能。通过这些选项,可以控制执行查询的用户,执行的数据库,事务模式等。

还有另一个执行动态字符串的函数:xdmp:unpath,它与xdmp:value类似,但更有限,因为它只能执行XPath。