我正在尝试将我所见过的所有示例拼凑起来以查找元素并修改它们,但我还没有想出一些可行的方法。我在下面创建了一个我目前在 SQL Server 2005 中运行的示例。我正在尝试将 ItemID 4 更改为 999:
DECLARE @x XML
SELECT @x = '
<ValueCollection>
<ItemGroup Name="Group A">
<ItemID>1</ItemID>
<ItemID>2</ItemID>
</ItemGroup>
<ItemGroup Name="Group B">
<ItemID>3</ItemID>
<ItemID>4</ItemID>
</ItemGroup>
</ValueCollection>
';
SET @x.modify ('
replace value of
(/ValueCollection/ItemGroup[ItemID="4"]/ItemID/text())[1]
with "999"
')
SELECT @x;
但是发生的情况是 ItemID 3 被更改为 999 而不是 4,如下面的结果所示。我认为正在发生的事情是“/ItemGroup[ItemID="4"] 正在定位正确的 <ItemGroup>,然后位置过滤器 [1] 给出了该 <ItemGroup> 中的第一个 <ItemID>(即 ID 3 ) -- 我只是还没有找到如何将位置过滤器更改为变量。
<ValueCollection>
<ItemGroup Name="Group A">
<ItemID>1</ItemID>
<ItemID>2</ItemID>
</ItemGroup>
<ItemGroup Name="Group B">
<ItemID>999</ItemID>
<ItemID>4</ItemID>
</ItemGroup>
</ValueCollection>
我有一种感觉,我的谷歌搜索和堆栈溢出还没有出现,这很简单。我感谢您的帮助!
凯文