如何用XQuery删除XML中每个<2>节点下多余的<3>节点
使用XQuery保留每个<2>节点下仅一个<3>节点的解决方案
场景回顾
你的原始XML结构如下:
<1> <2> <3/> <3/> <3/> </2> <2> <3/> <3/> </2> </1>
解决方案分两种场景:
1. 生成处理后的新XML(无修改原文档需求)
直接用XQuery的节点构造逻辑,过滤掉多余的<3>节点:
element 1 { for $two in //2 return element 2 { $two/3[1] (: 仅保留每个<2>下的第一个<3>节点 :) } }
这段代码会遍历所有<2>节点,对每个<2>只保留它的第一个<3>子节点,最终输出符合要求的XML结构。
2. 直接修改原文档(支持XQuery Update Facility的环境)
如果你的XQuery引擎支持更新操作(比如BaseX、MarkLogic、eXist-db等),可以直接执行删除语句移除冗余节点:
delete node //2/3[position() > 1]
- 逻辑说明:
//2/3[position() > 1]会定位到所有<2>节点下位置不是第一个的<3>节点,delete node语句直接删除这些节点。 - 若需保留最后一个
<3>而非第一个,只需把条件改为position() < last()即可。
内容的提问来源于stack exchange,提问作者idix
相关产品推荐
相关产品推荐

