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

时间:2015-04-07 16:16:16

标签: 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>

但是我不想制作地图只是为了将项目覆盖到xdmp:函数中。

还有其他办法吗?

1 个答案:

答案 0 :(得分:3)

您必须eval&#34;序列化&#34;函数从字符串或XML上下文中提取它:

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

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

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