SQL Server XML 修改删除没有属性或内部文本的节点



我需要能够删除所有具有任何名称的节点,只要(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(@*)]')

完美工作。

最新更新