我有下面的XML:TSQL修改()方法更改XML元素的前缀
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<soapenv:Fault xmlns:m="http://schemas.xmlsoap.org/soap/envelope/">
<first>value1</first>
<last>value2</last>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
所有我想要做的就是更新使用给定XPATH使用下面的代码(忽略作为前缀)的<first>
元素的值:
SET ANSI_PADDING ON;
SET ANSI_WARNINGS ON;
declare @xmlTBL table(tmlXML xml);
insert into @xmlTBL(tmlXML)
values('<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <soapenv:Fault xmlns:m="http://schemas.xmlsoap.org/soap/envelope/"> <first>valuu1</first> <last>value2</last> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope>');
UPDATE @xmlTBL SET tmlXML.modify('insert text{"TEST"} into (/*:Envelope/*:Body/*:Fault/first[1] [not(node()) and not(text())])[1]');
元价值的作品的更新,但什么也发生的是元素<soapenv:Fault>
现已成为<m:Fault>
,如下图所示:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<m:Fault xmlns:m="http://schemas.xmlsoap.org/soap/envelope/">
<first>TEST</first>
<last>value2</last>
</m:Fault>
</soapenv:Body>
</soapenv:Envelope>
是否有可能将我正在做的事情存档而没有影响前缀?
从*信息*的角度来看,没有任何改变。如果你将这些数据传递给其他没有使用本土化的kludgey解析器而不是一个体面的XML库的数据,它应该处理这些数据。 'Body'中的内容是来自命名空间'http:// schemas.xmlsoap.org/soap/envelope /'的'Fault'元素。使用什么本地前缀来标识该名称空间并不重要。 –
问题是,'m'前缀的名称空间定义不正确。 –
@DenisValeev - 我不会说这是不正确的。也许是冗余的,但是多个前缀与相同的命名空间关联是完全正确的。 –