我有下面的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 - 我不會說這是不正確的。也許是冗餘的,但是多個前綴與相同的命名空間關聯是完全正確的。 –