如何在XQuery中插入构造的XML节点? [英] How to insert a constructed XML nodes in XQuery?

查看:103
本文介绍了如何在XQuery中插入构造的XML节点?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用下面的代码插入一个节点,但是如果我重新运行代码,我不希望我的节点重复两次-

I want to insert a node using below code but if i will rerun the code i don't want my node to be repeated twice-

let $doc := fn:doc("abc.xml")

(: abc.xml looks like--

<root>
  <value1>somevalue</value1>
  <value2>somevalue</value2>
  <value3>somevalue</value3>
  <value4>somevalue</value4>
  <value5>Australia</value5>
  <value6>India</value6>
  <value7>USA</value7>
  <value8>somevalue</value8>
  <value9>somevalue</value9>
  <value10>somevalue</value10>
</root> :)

let $element :=  element Root{
                    element A{"A"},
                    element B{"B"},
                    element C{"C"},
                    element D{"D"},
                    element E{"E"}
                }  

let $doc := xdmp:node-insert-after(doc("abc.xml")//value4, $element) 
return doc("abc.xml")

每当我运行此查询时,都会在value4之后插入我的ELEMENT,但是我希望如果我多次运行此元素,则我的元素应该只插入一次,而不是多次插入.

Whenever i am running this query my ELEMENT is getting inserted after value4 but i want that if i am running this multiple times then my element should get inserted only once and not multiple times.

示例-If i am running this 2 times-

实际输出-

<root>
<value1>somevalue</value1>
<value2>somevalue</value2>
<value3>somevalue</value3>
<value4>somevalue</value4>
<Root>
    <A>A</A>
    <B>B</B>
    <C>C</C>
    <D>D</D>
    <E>E</E>
</Root>
<Root>
    <A>A</A>
    <B>B</B>
    <C>C</C>
    <D>D</D>
    <E>E</E>
</Root>
<value5>Australia</value5>
<value6>India</value6>
<value7>USA</value7>
<value8>somevalue</value8>
<value9>somevalue</value9>
<value10>somevalue</value10>
</root>

预期输出-

<root>
<value1>somevalue</value1>
<value2>somevalue</value2>
<value3>somevalue</value3>
<value4>somevalue</value4>
<Root>
    <A>A</A>
    <B>B</B>
    <C>C</C>
    <D>D</D>
    <E>E</E>
</Root>
<value5>Australia</value5>
<value6>India</value6>
<value7>USA</value7>
<value8>somevalue</value8>
<value9>somevalue</value9>
<value10>somevalue</value10>
</root>

任何建议??

推荐答案

在插入节点之前,请检查节点是否不存在:

Before inserting the node, check that it's not already there:

if (empty(child::Root)) then xdmp:update....

这篇关于如何在XQuery中插入构造的XML节点?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆