Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вставка одного XML_я в другой с xmlns ?  [new]
Greenhorn
Member

Откуда:
Сообщений: 311
Добрый день.

+ @@version
Microsoft SQL Server 2014 - 12.0.4416.0 (X64) 
Jun 11 2015 19:18:41
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)

+ Тестовый запрос
declare @XmlRes xml
      , @ReqXml xml      

set @XmlRes = N'
<soapenv:Envelope 
  xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>
  <soapenv:Header />
  <soapenv:Body>
    <SomeMethod xmlns="http://some.com/schemas/contracts/ServiceName">
      <request />
    </SomeMethod>
  </soapenv:Body>
</soapenv:Envelope>'

--set @ReqXml = N'<SomeNode>SomeText</SomeNode>'
SELECT @ReqXml = (SELECT 'SomeText' as [SomeNode] FOR XML PATH(''), TYPE)

set @XmlRes.modify(N'
    declare namespace soapenv="http://www.w3.org/2003/05/soap-envelope";
    declare namespace p1="http://some.com/schemas/contracts/ServiceName";
   
    insert sql:variable("@ReqXml") 
    into ((/soapenv:Envelope/soapenv:Body/p1:*/p1:request)[1])
'
)

select @XmlRes

+ Хочу получить
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soapenv:Header />
<soapenv:Body>
<SomeMethod xmlns="http://some.com/schemas/contracts/ServiceName">
<request>
<SomeNode>SomeText</SomeNode>
</request>
</SomeMethod>
</soapenv:Body>
</soapenv:Envelope>


Помогите разобраться с xmlns.

Доп. информация: @ReqXml формируется запросом к куче таблиц и без xmlns, т.к. у меня не получилось его туда вставить.
27 авг 15, 20:33    [18078206]     Ответить | Цитировать Сообщить модератору
 Re: Вставка одного XML_я в другой с xmlns ?  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
автор
Доп. информация: @ReqXml формируется запросом к куче таблиц и без xmlns, т.к. у меня не получилось его туда вставить.


-- ...
declare 
	@ReqXml xml;

;with xmlnamespaces(default 'http://some.com/schemas/contracts/ServiceName'),
t0(x) as (select 'SomeText' as [SomeNode] for xml path(''), type)
select @ReqXml = x from t0;

select @ReqXml;
-- ...


оно?
27 авг 15, 20:54    [18078248]     Ответить | Цитировать Сообщить модератору
 Re: Вставка одного XML_я в другой с xmlns ?  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soapenv:Header />
  <soapenv:Body>
    <SomeMethod xmlns="http://some.com/schemas/contracts/ServiceName">
      <request>
        <SomeNode xmlns="http://some.com/schemas/contracts/ServiceName">SomeText</SomeNode>
      </request>
    </SomeMethod>
  </soapenv:Body>
</soapenv:Envelope>
27 авг 15, 20:58    [18078262]     Ответить | Цитировать Сообщить модератору
 Re: Вставка одного XML_я в другой с xmlns ?  [new]
Greenhorn
Member

Откуда:
Сообщений: 311
churupaha,

Спасибо.
Не знал про "default". Все заработало ...
28 авг 15, 08:26    [18079184]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить