如何从XQuery搜索中排除特定节点?



我有以下脚本,实际上将添加Test="Value"属性设置为XML文档中的所有节点:

declare @xml XML = '
<root>
<text><b>test2</b></text>
<text>test</text>
<text>test</text>
<text>test</text>
</root>
'
while @xml.exist('//*[not(@TEST)]') = 1
begin
set @xml.modify('
insert attribute TEST {"value"}
into (//*[not(@TEST)])[1]
')
end
select @xml

但是如何从查询中排除特定的节点呢?我想将此属性应用于所有节点,但"a", "b">

请尝试以下解决方案。

/p>

DECLARE @xml XML = 
N'<root>
<text><b>test2</b></text>
<text>test</text>
<text>test</text>
<text>test</text>
</root>;
'
WHILE @xml.exist('//*[not(local-name(.)=("a","b"))][not(@TEST)]') = 1
BEGIN
SET @xml.modify('
insert attribute TEST {"value"}
into (//*[not(local-name(.)=("a","b"))][not(@TEST)])[1]
');
END;
-- test
SELECT @xml;

<root TEST="value">
<text TEST="value">
<b>test2</b>
</text>
<text TEST="value">test</text>
<text TEST="value">test</text>
<text TEST="value">test</text>
</root>;

最新更新