xquery - 如何将 xml 中的项目转换为 xdmp :function?

标签 xquery marklogic

我似乎无法在 xml 中将此元素设为 xdmp:function

这是 xml:

<xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <function xsi:type="xdmp:function" xmlns:xdmp="http://marklogic.com/xdmp">xdmp:function(xs:QName("fn:empty"))</function>
</xml>

如您所见,我尝试将类型放入 xml 中,但没有成功。

我尝试使用cast as,但也不起作用。我尝试过将元素包装在 xdmp:function 中,但这也不起作用。

我能够将函数放入映射中并将其取出。像这样:

let $function := xdmp:function(xs:QName("fn:empty"))
let $xml :=
<xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <function xsi:type="xdmp:function" xmlns:xdmp="http://marklogic.com/xdmp">{$function}</function>
</xml>
let $map := map:map()
let $put := map:put($map, 'function', $function)
let $mapFunction := map:get($map, 'function')
let $applyMapFunction := xdmp:apply($mapFunction, "something")
(:
  let $xmlFunction :=  $xml/function
  let $applyXmlFunction := xdmp:apply($xmlFunction, "something")
:)
return $xml

<xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <function xsi:type="xdmp:function" xmlns:xdmp="http://marklogic.com/xdmp">xdmp:function(xs:QName("fn:empty"))</function>
</xml>

但是,我不想制作 map 只是为了将项目覆盖到 xdmp:function 中。

还有其他方法可以做到这一点吗?

最佳答案

您必须eval“序列化”函数才能从字符串或 XML 上下文中提取它:

xdmp:eval($xml/function/fn:string())

或者,您可以使用 xdmp:value ,这是一个更有限的 eval 函数(它使用相同的执行上下文),因此可以防止某些类型的代码注入(inject):

xdmp:value($xml/function/fn:string())

关于xquery - 如何将 xml 中的项目转换为 xdmp :function?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29496263/

相关文章:

xquery - 带参数的marklogic调用函数

sql - XML 模式集合破坏了 xquery

xquery - 使用 Java API 进行容器约束(嵌套)

marklogic - 何时使用集合与目录?

java - 使用 XQuery eval 通过 JAVA 将文件上传到 MarkLogic Server 文件系统

python-2.7 - 我想使用 Python 操作 MarkLogic 中的文件

marklogic - 如何使用 fn :starts-with() and fn:ends-with() with cts:uris()

sql-server - 使用 xquery 压缩 xml 节点?

javascript - 如何将 XML 输入从一种格式转换为另一种格式

scheduled-tasks - 在 MarkLogic 中处理禁运内容场景