<game xmlns="http://my.name.space" ></game> 这是我的根元素。我已经编写了一个存储过程来向其中插入元素。为了总结这个存储过程,下面是SQL
UPDATE ChessGame SET GameHistory.modify('insert <move><player>black</player><piece>pawn</piece><start>E7</start><end>E6</end></move> as last into (/game)[0]') WHERE Id = @GameId;现在,当MSSQL执行插入操作时,还会插入一个空的命名空间,因此结果如下所示
<move xmlns="">
<player>black</player>
<piece>king</piece>
<start>E7</start>
<end>E6</end>
</move>现在我已经尝试使用这两种方法
WITH XMLNAMESPACES(DEFAULT 'http://my.name.space')和
GameHistory.modify('declare default element namespace "http://my.name.space"; insert ...')但是我最后到处都是前缀,每个元素都有一个名称空间声明。
缺少处理MSSQL输入的前缀的逻辑的代码库中会出现问题。最后,我只想在xml根目录中插入一个新元素,并将名称空间保留为空(使用根目录default?)。我对此非常陌生,但据我所知,如果我在根元素中有一个名称空间,那么不是所有的子节点都应该有一个默认的根名称空间吗?
发布于 2009-09-04 19:17:58
declare @x xml;
select @x='<game xmlns="http://my.name.space" ></game>';
set @x.modify('declare default element namespace "http://my.name.space";
insert <move><player>black</player><piece>pawn</piece>
<start>E7</start><end>E6</end></move> as last into (/game)[1]');
select @x;这会产生以下结果:
<game xmlns="http://my.name.space">
<move>
<player>black</player>
<piece>pawn</piece>
<start>E7</start>
<end>E6</end>
</move>
</game>在SQL2005 SP2和SQL2008 SP1上。
此外,此表更新也可以正常工作:
declare @t table (x xml);
insert into @t (x) values ('<game xmlns="http://my.name.space" ></game>');
update @t
set x.modify('declare default element namespace "http://my.name.space";
insert <move><player>black</player><piece>pawn</piece>
<start>E7</start><end>E6</end></move> as last into (/game)[1]');
select * from @t;发布于 2009-09-04 19:25:45
好的,这对我很有效:
DECLARE @x XML;
SET @x = '<game xmlns="http://my.name.space" ></game>';
select @x
SET @x.modify(
' declare default element namespace "http://my.name.space";
insert <move><player>black</player><piece>pawn</piece><start>E7</start><end>E6</end></move> as last into (/*:game)[1]'
)
select @xhttps://stackoverflow.com/questions/1380858
复制相似问题