Xquery 如何在转换中替换$content值?
我需要在转换中替换$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
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
,但不能同时调用两者。