Zoals het gezegde luidt:"Waar een wil is, is een weg"
Hier zijn twee methoden: de eerste is om eenvoudig de vorige xml te vervangen door een nieuwe xml die is opgebouwd uit het origineel met de nieuwe elementnaam. In mijn voorbeeld heb ik Benen/Been veranderd in Ledematen/Limb. Dit kan heel ingewikkeld worden voor alles behalve het eenvoudigste schema
En ten tweede een meer geschikte benadering van het combineren van invoegen en verwijderen.
Ik heb ze gecombineerd tot één eenvoudig voorbeeld:
declare @xml as xml = '<animal species="Mouse">
<legs>
<leg>Front Right</leg>
<leg>Front Left</leg>
<leg>Back Right</leg>
<leg>Back Left</leg>
</legs>
</animal>'
set @xml = (select
t.c.value('@species', 'varchar(max)') as '@species'
,(select
ti.C.value('.', 'varchar(max)')
from @Xml.nodes('//animal/legs/leg') ti(c) for xml path('limb'), /* root('limb'), */type) as limbs
from @xml.nodes('//*:animal') t(c) for xml path('animal'), type)
select @xml;
while (@xml.exist('/animal/limbs/limb') = 1) begin
/*insert..*/
set @xml.modify('
insert <leg>{/animal/limbs/limb[1]/text()}</leg>
before (/animal/limbs/limb)[1]
');
/*delete..*/
set @xml.modify('delete (/animal/limbs/limb)[1]');
end
set @xml.modify('
insert <legs>{/animal/limbs/leg}</legs>
before (/animal/limbs)[1]
');
set @xml.modify('delete (/animal/limbs)[1]');
select @xml;