Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите, с XQuery @xml.modify('delete ...')  [new]
Alex-65
Member

Откуда:
Сообщений: 28
Уважаемые коллеги!
Помогите с изменением XML - нужно удалить все элементы "code" во всех узлах.

XML такой:
DECLARE @xml XML
SET @xml='
<ns2:parentNode xmlns:ns2="http://www.site1.ru/export/1">
  <ns2:node1>
    <p1:id xmlns:p1="http://www.site1.ru/types/1">40131</p1:id>
    <p2:code xmlns:p2="http://www.site1.ru/types/1">34.10.13.241</p2:code>
    <p3:name xmlns:p3="http://www.site1.ru/types/1">Двигатели внутреннего сгорания 1</p3:name>
  </ns2:node1>
  <ns2:node2>
    <p4:id xmlns:p4="http://www.site1.ru/types/1">40132</p4:id>
    <p5:code xmlns:p5="http://www.site1.ru/types/1">34.10.13.242</p5:code>
    <p6:name xmlns:p6="http://www.site1.ru/types/1">Двигатели внутреннего сгорания 2</p6:name>
  </ns2:node2>
</ns2:parentNode>
'


нужно удалить элементы CODE (code) во всех узлах, чтобы получилось примерно так:
<ns2:parentNode xmlns:ns2="http://www.site1.ru/export/1">
  <ns2:node1>
    <p1:id xmlns:p1="http://www.site1.ru/types/1">40131</p1:id>
    <p3:name xmlns:p3="http://www.site1.ru/types/1">Двигатели внутреннего сгорания 1</p3:name>
  </ns2:node1>
  <ns2:node2>
    <p4:id xmlns:p4="http://www.site1.ru/types/1">40132</p4:id>
    <p6:name xmlns:p6="http://www.site1.ru/types/1">Двигатели внутреннего сгорания 2</p6:name>
  </ns2:node2>
</ns2:parentNode>


заранее спасибо!
10 июл 15, 14:34    [17876984]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, с XQuery @xml.modify('delete ...')  [new]
invm
Member

Откуда: Москва
Сообщений: 9915
while @xml.exist('//*:code') = 1
 set @xml.modify('delete //*:code[1]');
10 июл 15, 14:45    [17877066]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, с XQuery @xml.modify('delete ...')  [new]
Alex-65
Member

Откуда:
Сообщений: 28
invm, Спасибо!
работает.
но не быстро ... :((

а можно этот запрос как-то ускорить? т.к. у меня узлов, к сожалению, не 2, а несколько тысяч ... да и самих XML'ей тже много
или м.б. есть какой-то другой способ?
10 июл 15, 14:58    [17877158]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, с XQuery @xml.modify('delete ...')  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
invm,

+

у меня так отработало

set @xml.modify('declare namespace n="http://www.site1.ru/types/1"; delete //n:code')
select @xml;
10 июл 15, 15:00    [17877168]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, с XQuery @xml.modify('delete ...')  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
+ чтобы было быстрее надо избавиться от // и использовать абсолютные пути.
10 июл 15, 15:02    [17877189]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, с XQuery @xml.modify('delete ...')  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
+

node1
node2
node3

не получится абсолютный путь.
10 июл 15, 15:06    [17877223]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, с XQuery @xml.modify('delete ...')  [new]
Alex-65
Member

Откуда:
Сообщений: 28
churupaha, Спасибо!

В первом случае (автор: invm)
Время:53.391 cек.

Во втором случае (автор: churupaha)
Время:0.310 cек.

почувствуйте разницу ;))

Коллеги,
invm и churupaha

еще раз Спасибо!
10 июл 15, 15:13    [17877269]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить