Xquery 如何在转换中替换$content值?

Xquery 如何在转换中替换$content值?,xquery,marklogic,marklogic-8,marklogic-9,Xquery,Marklogic,Marklogic 8,Marklogic 9,我需要在转换中替换$content值 xquery version "1.0-ml"; module namespace test = "http://marklogic.com/rest-api/transform/security-load"; declare function test:transform( $context as map:map, $params as map:map, $content as document-node() ) as do

我需要在转换中替换$content值

xquery version "1.0-ml";

module namespace test =
  "http://marklogic.com/rest-api/transform/security-load";

declare function test:transform(
    $context as map:map,
    $params as map:map,
    $content as document-node()
) as document-node()
{       
        let $jsonObj := xdmp:from-json($content)
        let $inputval := "fname,lname"
        let $entity :="holidayDate"
        let $domain :="referenceData"


        let $uri := xdmp:apply(
            xdmp:function(xs:QName("createUri"), "/wdsUtils.sjs"),
            $jsonObj,
            $inputval)


        let $root := xdmp:apply(
            xdmp:function(xs:QName("addMetaData"), "/wdsUtils.sjs"),
            $entity,
            $domain,
            $jsonObj)

        let $output := $root    

        return map:put($context,"uri",$uri),
        document { $output }
};

我需要用$root值更改$content值并返回它。我试图直接返回$root,但没有成功,我得到了无效的文档错误


问题在于,
$output
的作用域是FLWOR语句,但您在该语句之外引用它。请参见下面
返回中的括号

xquery version "1.0-ml";

module namespace test = "http://marklogic.com/rest-api/transform/security-load";

declare function test:transform(
    $context as map:map,
    $params as map:map,
    $content as document-node()
) as document-node()
{       
    let $jsonObj := xdmp:from-json($content)
    let $inputval := "fname,lname"
    let $entity :="holidayDate"
    let $domain :="referenceData"

    let $uri := 
        xdmp:apply(
            xdmp:function(xs:QName("createUri"), "/wdsUtils.sjs"),
            $jsonObj,
            $inputval
        )

    let $root := 
        xdmp:apply(
            xdmp:function(xs:QName("addMetaData"), "/wdsUtils.sjs"),
            $entity,
            $domain,
            $jsonObj
        )

    let $output := $root    

    return (
        map:put($context,"uri",$uri),
        document { $output }
    )
};

你能发布你得到的错误吗?更新了问题,有错误,请检查。错误似乎是:
未定义变量$output
。但它就在那里。您是否在上传转换时忘记了变量?我将重新上传转换并重试。当我尝试返回$content时,它工作正常,但当我尝试返回$output时,它不起作用。我是否应该将$output键入其他内容,然后返回?即使只返回$root,它也不起作用。为什么?
返回(map:put($context,“uri”,$uri),$root)
,因为函数的返回类型是
document-node()
(请参阅“as”子句)。看起来,
$root
不是文档节点,因此需要将结果包装在
文档{}
中。如何将$root转换为文档节点?嘿,终于找到了解决方案<代码>返回(map:put($context,“uri”,$uri),文档{xdmp:to json($contentWithMetadata)})
I was missing“()”括号
xdmp:to json
返回一个
document-node()
;您需要
文档{}
或调用
xdmp:to json
,但不能同时调用两者。