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

Откуда:
Сообщений: 73
Как преобразовать данные при выводе из таблицы из
  <root>
  <step1>This is step 1</step1>
  <step2>This is step 2</step2>
  <step3>This is step 3</step3>
</root>>

в следующий вид для тега <step1>
 <root>
  <step1>This is step 1 and row 1.This is step 1 and row 2.This is step 1 and row 3.</step1>
  <step2>This is step 2</step2>
  <step3>This is step 3</step3>
</root>

Есть ли такая возможность?
26 мар 18, 11:01    [21285550]     Ответить | Цитировать Сообщить модератору
 Re: Как удалить CR/LF символ переноса на новую строку внутри тега XML  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Aleksey br,

а откуда вон тот текст возьмётся?
26 мар 18, 11:05    [21285570]     Ответить | Цитировать Сообщить модератору
 Re: Как удалить CR/LF символ переноса на новую строку внутри тега XML  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Запрос покажите которым вы такой XML генерите. Или это уже хранится в таблице и нужно просто step2/step3 убрать?
26 мар 18, 11:06    [21285572]     Ответить | Цитировать Сообщить модератору
 Re: Как удалить CR/LF символ переноса на новую строку внутри тега XML  [new]
Aleksey br
Member

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

XML уже хранится в таблице.

Блин! удалил часть описания:
Из
 <root>
  <step1>This is step 1 and row 1.
            This is step 1 and row 2.
            This is step 1 and row 3.</step1>
  <step2>This is step 2</step2>
  <step3>This is step 3</step3>
</root>

получить:
<root>
  <step1>This is step 1 and row 1.This is step 1 and row 2.This is step 1 and row 3.</step1>
  <step2>This is step 2</step2>
  <step3>This is step 3</step3>
</root>
26 мар 18, 11:14    [21285600]     Ответить | Цитировать Сообщить модератору
 Re: Как удалить CR/LF символ переноса на новую строку внутри тега XML  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1527
Aleksey br,

1. А зачем плодить темы? В предыдущей уже указано, ято форматирование результата больше подходит для клиентской программы.
2. Зацикливанием на "внутри тега" вы демонстрируете незнание стандарта XML, который никак не реагирует на непечатные символы между тегами. То есть ваш текст
<root>
<step1>This is step 1 and row 1.This is step 1 and row 2.This is step 1 and row 3.</step1>
<step2>This is step 2</step2>
<step3>This is step 3</step3>
</root>

совершенно равнозначен для любого нормального парсера такому тексту:
<root><step1>This is step 1 and row 1.This is step 1 and row 2.This is step 1 and row 3.</step1><step2>This is step 2</step2><step3>This is step 3</step3></root>
который, как ни странно, можно получить простейшим реплейсом. И который ваша клиентская прога наверняка покажет точно также, как и ваш текст.
26 мар 18, 11:21    [21285621]     Ответить | Цитировать Сообщить модератору
 Re: Как удалить CR/LF символ переноса на новую строку внутри тега XML  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
Aleksey br,

declare @t varchar(max) = ' <root>
<step1>This is step 1 and row 1.
This is step 1 and row 2.
This is step 1 and row 3.</step1>
<step2>This is step 2</step2>
<step3>This is step 3</step3>
</root>';

with repl as
(Select a.t From (Values (@t)) a(t)
union all
Select stuff(repl.t,patindex('%[^>]'+char(13)+char(10)+'%',t)+1,2,' ')
From repl
Where patindex('%[^>]'+char(13)+char(10)+'%',t)>0
)
Select top 1 @t = t From repl Order by len(t)
print @t
26 мар 18, 11:33    [21285683]     Ответить | Цитировать Сообщить модератору
 Re: Как удалить CR/LF символ переноса на новую строку внутри тега XML  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
Aleksey br,

Либо
replace(
   replace(
      replace(@xml,'>'+char(13)+char(10),@ДругойНеПечатныйСимвол),
      char(13)+char(10),
      ' '),
   @ДругойНеПечатныйСимвол,
   char(13)+char(10))
26 мар 18, 11:49    [21285754]     Ответить | Цитировать Сообщить модератору
 Re: Как удалить CR/LF символ переноса на новую строку внутри тега XML  [new]
Aleksey br
Member

Откуда:
Сообщений: 73
Kopelly
with repl as
(Select a.t From (Values (@t)) a(t)
union all
Select stuff(repl.t,patindex('%[^>]'+char(13)+char(10)+'%',t)+1,2,' ')
From repl
Where patindex('%[^>]'+char(13)+char(10)+'%',t)>0
)
Select top 1 @t = t From repl Order by len(t)
print @t


А как будет выглядеть такой запрос для
declare @t table (ID int,data XML)
insert into @t
select CLAIMID, Data from TBL_NAME


Чтобы результат можно было потом присоединить к другому результату по ID
26 мар 18, 13:10    [21286061]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить