我有两份文件-
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>也就是说,节点正在被替换,但它没有插入额外的节点id5,在本例中是从doc1。有什么建议吗?
发布于 2018-06-20 21:22:10
问题是doc2中不存在id5,而您正在使用xdmp:node-replace。不能替换不存在的节点。当这种情况发生时,您需要扩展您的逻辑以使用类似于xdmp:node-insert-child的东西来处理它。
发布于 2018-06-24 14:25:28
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>https://stackoverflow.com/questions/50947991
复制相似问题