Marklogic 如何将文档节点传递到eval/invoke

Marklogic 如何将文档节点传递到eval/invoke,marklogic,Marklogic,我有如下代码: let $evalParams := map:map( <map:map xmlns:map='http://marklogic.com/xdmp/map'> <map:entry> <map:key>document</map:key> <map:value>{$doc}</map:value> <

我有如下代码:

let $evalParams := map:map(
    <map:map
        xmlns:map='http://marklogic.com/xdmp/map'>
        <map:entry>
            <map:key>document</map:key>
            <map:value>{$doc}</map:value>
        </map:entry>
    </map:map>)
let $resultDocument := xdmp:eval($transformCode, $evalParams)
那次检查不幸失败。据我所知,这与map:map结构有关,而不是通过文档节点

有什么好办法吗?我可以用xdmp:unqote,但感觉有点乱。我也可以将文件放入数据库中,但仅仅为此而进行文档插入和删除,感觉开销有点大


如果您对此有任何想法,我们将不胜感激。

简短回答:您想要的是使用
map:entry()
而不是
map:map()
。下面返回true(即,它存储文档 节点作为键的值(映射中的键“):

let$doc:=document{}
设$map:=map:entry('key',$doc)
返回
映射:获取文档-node()的($map,'key')实例
那么,下面存储元素的方法有什么不同呢 而不是节点

let$doc:=document{}
让$map:=map:map(
钥匙
{$doc}
)
返回
map:get($map,'key')元素()的实例
区别在于上述代码首先将文档节点复制到 XML树。该XML树作为参数传递给函数。 添加到元素的文档节点只是“忽略”,其 根据XDM建议,直接复制子对象。这个XML 树用作映射的XML表示形式,并“反序列化”。 元素
映射中的内容:value
此时是一个元素节点, 所以在地图上就这样结束了

如果我们去掉所有的地图机器,这可能会更清楚:

let$doc:=document{}
让$elem:={$doc}
返回
$elem/node()元素()的实例
最后一个代码中
$elem
的值如下(这使得 既然文档节点不能被删除,那么它还能是什么呢 任何其他节点的子节点?:


declare variable $document as document-node() external;