在下面的xml中,我有三个5/Item元素,其中4个有Blob子元素。我想删除有子Blob元素的元素,但只在Item/@Name中有文本"Blob"的元素。
<Items>
<Item Name="Blob123">
<Blob/>
</Item>
<Item Name="Blob124">
<Blob/>
</Item>
<Item Name="Blob125">
<Blob/>
</Item>
<Item Name="Blob126">
</Item>
<Item Name="Xyz126">
<Blob/>
</Item>
</Items>
这个查询返回名为"Blob%"的3/Item元素,并带有一个子/Blob元素。
select xmlVal.query('(/Items/Item[contains(@Name, "Blob")]/Blob/..)')
然而,当我试图删除这些元素使用这个xquery:
select xmlVal.modify('delete (/Items/Item[contains(@Name, "Blob")]/Blob/..)')
我得到:不正确地使用XML数据类型方法"修改"。在此上下文中需要使用非mutator方法。
我做错了什么
为了帮助其他人,我需要使用update/set来修复这个问题,并且还需要稍微更改xpath
更新表设置xmlVal。修改("删除(/项目/项目(包含(@ name,"Blob")](Blob))")