0

在下面的 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 数据类型方法“修改”。在这种情况下,需要一个非突变方法。

我究竟做错了什么。

4

1 回答 1

0

如果它对其他人有帮助,要解决这个问题,我需要使用 update/set 并且还需要稍微更改 xpath

update table1 set xmlVal.modify('delete (/Items/Item[contains(@Name, "Blob")][Blob])')

于 2013-03-18T20:37:19.580 回答