如何将 xml 中的项目投射到 xdmp:function?
How can I cast an item in my xml to a xdmp:function?
我似乎无法将 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:function 而必须制作地图。
还有其他方法吗?
您必须 eval
"serialized" 函数从字符串或 XML 上下文中提取它:
xdmp:eval($xml/function/fn:string())
或者,您可以使用 xdmp:value
,这是一个更有限的 eval
函数(它使用相同的执行上下文),因此可以防止某些类型的代码注入:
xdmp:value($xml/function/fn:string())
我似乎无法将 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:function 而必须制作地图。
还有其他方法吗?
您必须 eval
"serialized" 函数从字符串或 XML 上下文中提取它:
xdmp:eval($xml/function/fn:string())
或者,您可以使用 xdmp:value
,这是一个更有限的 eval
函数(它使用相同的执行上下文),因此可以防止某些类型的代码注入:
xdmp:value($xml/function/fn:string())