首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Marlogic将document1中的新节点替换为文档2?

如何使用Marlogic将document1中的新节点替换为文档2?
EN

Stack Overflow用户
提问于 2018-06-20 20:13:05
回答 2查看 64关注 0票数 1

我有两份文件-

代码语言:javascript
复制
1. doc1-
<root>
   <id1>1</id1>
   <id2>243</id2>
   <id3>3343</id3>
   <id4>4454</id4>
   <id5>546</id5>
</root>

2. doc2-
<root>
   <id1>1</id1>
   <id2>abc</id2>
   <id3></id3>
   <id4></id4>
   <id6>35545</id6>
   <id7>Delhi</id7>
</root>

如果(id1等于)我想要这样的输出-

代码语言:javascript
复制
<root>
   <id1>1</id1>
   <id2>243</id2>
   <id3>3343</id3>
   <id4>4454</id4>
   <id5>546</id5>
   <id6>35545</id6>
   <id7>Delhi</id7>
</root>

基本上,我是通过从doc1获取内容来更新我的doc2。

代码:-

代码语言:javascript
复制
declare function local:replace-nodes($doc_2 as node(), $doc_1 as node()){
let $doc := 
    for $each-node in $doc_1//*/*[text()]
    return xdmp:node-replace($doc_2//*/*[local-name(.)=fn:local-
 name($each-node)], $each-node)
 return "Nodes Replaced"
};

从上面的代码中,我得到了以下输出-

代码语言:javascript
复制
<root>
  <id1>1</id1>
  <id2>243</id2>
  <id3>3343</id3>
  <id4>4454</id4>
  <id6>35545</id6>
  <id7>Delhi</id7>
</root>

也就是说,节点正在被替换,但它没有插入额外的节点id5,在本例中是从doc1。有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2018-06-20 21:22:10

问题是doc2中不存在id5,而您正在使用xdmp:node-replace。不能替换不存在的节点。当这种情况发生时,您需要扩展您的逻辑以使用类似于xdmp:node-insert-child的东西来处理它。

票数 3
EN

Stack Overflow用户

发布于 2018-06-24 14:25:28

代码语言:javascript
复制
let $a := $doc1/root/*[data(.)]
let $b := $doc2/root/*[data(.)]
let $c := element x {$a, $b}/*
let $d := <r>
          {
            for $i in $c
            order by $i/name(), $i/text()
            return $i
          }
          </r>
return    <s>
          {
            for $g in $d/*
            let $gg :=  $g[. ne following-sibling::*[1]] 
            return $gg
          }
          </s>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50947991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档