是否可以使用 XML DML 语句重命名非类型化 XML 列中的元素?
我正在更新 XML 列上的 XML 架构集合,需要通过重命名一个元素来修补现有 XML 实例,然后才能应用最新架构。
据我从文档中可以看出,您只能插入/删除节点或替换它们的值。
俗话说,“有志者事竟成”
这里有两种方法:第一种方法是简单地将以前的 xml 替换为新的 xml,该新的 xml 是根据原始 xml 构造的,并具有新的元素名称。在我的示例中,我已将 Legs/Leg 更改为 Limbs/Limb,除了最简单的模式之外,这可能会变得非常复杂
其次,结合插入和删除的更合适的方法。
我将它们组合成一个简单的例子:
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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)