xquery - 如何在 XQuery 中插入构造的 XML 节点?
问题描述
我想使用下面的代码插入一个节点,但是如果我要重新运行代码,我不希望我的节点重复两次-
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")
每当我运行此查询时,我ELEMENT
都会在之后插入,value4
但我希望如果我多次运行此查询,那么我的元素应该只插入一次而不是多次。
例子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>
有什么建议么 ??
解决方案
在插入节点之前,检查它是否已经存在:
if (empty(child::Root)) then xdmp:update....
推荐阅读
- angular - 禁用重新加载页面 Angular 6 路由
- c# - Android.Gms.Drive 下载文件帮助
- c# - ObservableCollection 在 foreach 循环中无缘无故地清空自己
- r - 基于变量运行定义序列,并使用来自另一个变量的附加条件
- codemirror - Codemirror-grammar 如何使关键字检查不区分大小写
- c# - 如何将 C 联合转换为 C#?
- mysql - 我应该什么时候关闭 MySQL 中的语句
- list - 如何在haskell中生成具有自己数据类型的列表
- xml - 如何为一周中的几天编写有效的 xsd ?
- java - 如何使用 ObjectMapper 从空 JSON 文件反序列化为 Java 对象