如何使用Marlogic将XML中的新节点从document1替换为document 2?

时间:2018-06-20 12:13:05

标签: xml xquery marklogic

我有2个文档-

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相等),我想要这样的输出-

<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的。

代码:-

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"
};
从上面的代码

我得到下面的输出-

<root>
  <id1>1</id1>
  <id2>243</id2>
  <id3>3343</id3>
  <id4>4454</id4>
  <id6>35545</id6>
  <id7>Delhi</id7>
</root>

即节点将被替换,但不会从doc1中插入多余的节点(在这种情况下为id5)。有什么建议吗?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

SELECT * FROM communities c LEFT JOIN communities_follow cf ON c.user_id = cf.user_id where
cf.user_id = '$user_id';
相关问题