【问题标题】:How to replace the $content value in transformation?如何替换转换中的 $content 值?
【发布时间】:2019-04-02 08:45:39
【问题描述】:

我需要替换转换中的 $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 但它不起作用,我收到无效文档错误。

【问题讨论】:

  • 你能发布你得到的错误吗?
  • 更新问题有错误,请查收。
  • 错误似乎是:undefined variable $output。但它就在那里。您是否在上传转换时忘记了变量?我会重新上传转换并重试。
  • 当我尝试返回 $content 时它工作正常,但是当我尝试返回 $output 时它不起作用。
  • 我应该将 $output 类型转换为其他内容然后返回吗??

标签: xquery marklogic marklogic-8 marklogic-9


【解决方案1】:

问题是$output 的范围仅限于 FLWOR 语句,但您在该语句之外引用它。请参阅下面return 中的括号。

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,它也不起作用。为什么?return ( map:put($context,"uri",$uri), $root )
  • 因为函数的返回类型是document-node()(参见“as”子句)。看起来$root 不是文档节点,因此需要将结果包装在document { } 中。
  • 如何将 $root 转换为文档节点?
  • 嘿,终于找到解决办法了!! return (map:put($context,"uri",$uri), document { xdmp:to-json($contentWithMetadata) })我缺少“()”括号
  • xdmp:to-json 返回一个document-node();您需要document { } 或对xdmp:to-json 的调用,但不能同时使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-23
  • 2017-05-10
  • 2018-02-09
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
相关资源
最近更新 更多