我需要能够删除所有具有任何名称的节点,只要(a(节点没有属性或(b(节点没有内部文本。
示例 XML:
<mydoc>
<delete_me />
<keep_me value="yes!" />
<but_do_not_keep_me></but_do_not_keep_me>
<should_you_keep_me>Absolutely!</should_you_keep_me>
</mydoc>
预期输出为
<mydoc>
<keep_me value="yes!" />
<should_you_keep_me>Absolutely!</should_you_keep_me>
</mydoc>
我已经想出了满足一个条件或另一个条件的查询。
@xml.modify('delete //*[empty(@*)]')
这只会保留具有属性的元素。同样地
@xml.modify('delete //*[empty(node())]')
将删除所有空节点。但是我不知道如何完成这两个目标。如果我尝试做一个联合|
,那会给我错误XQuery [modify()]: The XQuery syntax 'union' is not supported.
。
有什么建议吗?
根据@ZLK上面的评论,允许使用and
关键字。
@xml.modify('delete //*[empty(node()) and empty(@*)]')
完美工作。