如何从 XQuery 搜索中排除特定节点?
How to exclude specific nodes from XQuery search?
我有以下脚本,它实际上会将 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”之外的所有节点
请尝试以下解决方案。
SQL
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>;
我有以下脚本,它实际上会将 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”之外的所有节点
请尝试以下解决方案。
SQL
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>;