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

Откуда:
Сообщений: 2
У меня получается сортировать только по одному уровню:

DECLARE @myxml xml = ' 
<root> 
  <lev1_2>
      <lev2_8/> 
      <lev2_5/> 
  </lev1_2> 
  <lev1_3/> 
  <lev1_2> 
      <lev2_7/> 
      <lev2_3/> 
  </lev1_2>
  <lev1_1/>  
</root> 
' 

SET @myxml =@myxml.query(' 
  <root> {
    for $k1 in (/*/*) 
    order by fn:local-name($k1) 
    return $k1
  } 
  </root>
')
19 май 19, 13:44    [21888165]     Ответить | Цитировать Сообщить модератору
 Re: Как сортировать вложенные xml теги без явного указания их имен с помощью XQuery?  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 927
Wigggi,

извращение какое-то
DECLARE @myxml xml = ' 
<root> 
  <lev1_2>
      <lev2_8/> 
      <lev2_5/> 
  </lev1_2> 
  <lev1_3/> 
  <lev1_2> 
      <lev2_7/> 
      <lev2_3/> 
  </lev1_2>
  <lev1_1/>  
</root> 
'
DECLARE @mydata NVARCHAR(MAX) = CONVERT( NVARCHAR(MAX), @myxml ) 
;
CREATE TABLE #t ( [node] VARCHAR(10), [src] VARCHAR(MAX), [new] NVARCHAR(MAX) )
;
INSERT
INTO
  #t
SELECT
  [node]  = CONVERT( VARCHAR(10), t.x.value( 'fn:local-name(.)', N'VARCHAR(10)' ) ),
  [src]   = CONVERT( VARCHAR(MAX), t.x.query( '.' ) ),
  [new]   = CONVERT( VARCHAR(MAX), t.x.query( 'for $k1 in (./*) 
    order by fn:local-name($k1) 
    return $k1' ) )
FROM
  @myxml.nodes( '//*' ) t( x )
;
SELECT
  @mydata = REPLACE( @mydata, [src], '<' + [node] + '>' + [new] + '</' + [node] + '>' )
FROM
  #t
;
SELECT
  CONVERT( XML, @mydata )
;
DROP TABLE #t
;
20 май 19, 11:41    [21888689]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить