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

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

+ select @@version

Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
Feb 10 2012 19:39:15
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)


Есть XML в котором текст записан в атрибут
declare @xml xml, @stmt varchar(max)
set @xml = N'
<Root>
  <Node Attr="Attr 1
Attr 2
Attr 3" />
</Root>
'
select @stmt = @xml.value( '(Root/Node/@Attr)[1]', 'nvarchar(max)' )
print @stmt

Как получить текст атрибута без искажений ?
т.е.
Получаю:
Attr 1 Attr 2 Attr 3
Нужно:
Attr 1
Attr 2
Attr 3
6 ноя 13, 10:05    [15082591]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить текст из XML_я ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Attr 1 Attr 2 Attr 3 и есть "текст атрибута без искажений"
Вы наверное просто не знаете, что спецсимволы в XML должны экранироваться
6 ноя 13, 10:29    [15082712]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить текст из XML_я ?  [new]
Greenhorn
Member

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

Хорошо - пусть "без искажений"
Как получить текст атрибута с "искажениями"
Получаю:
Attr 1 Attr 2 Attr 3
Нужно:
Attr 1
Attr 2
Attr 3
6 ноя 13, 10:32    [15082731]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить текст из XML_я ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Greenhorn
Как получить текст атрибута с "искажениями"

Если вы про символы перевода строки и новой строки, то для начала их надо _занести_ в ваш xml
Простой select @xml показывает, что их там нет
6 ноя 13, 10:33    [15082745]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить текст из XML_я ?  [new]
Greenhorn
Member

Откуда:
Сообщений: 311
Glory
Greenhorn
Как получить текст атрибута с "искажениями"

Если вы про символы перевода строки и новой строки, то для начала их надо _занести_ в ваш xml
Простой select @xml показывает, что их там нет

Хорошо.
Есть файл с XML_ем, на подобии тестового примера.
В котором значения интересующих меня атрибутов записаны с переводом строки.
Как мне вытащить значения этих атрибутов сохранив переводы строк ???
declare @Cfg nvarchar(1024)
      , @xml xml
      , @stmt nvarchar(max)
set @cfg = N'c:\App\Some.config'

set @stmt =  N'select @stmt = cast(t.BulkColumn as varchar(max)) from openrowset( bulk ''' + @cfg + ''', SINGLE_BLOB) as t'

exec sp_executesql @stmt=@stmt,@params=N'@stmt nvarchar(max) output',@stmt=@stmt output

print @stmt
-- Текст с переводом строки
select @stmt = @xml.value('(Root/Node/@Attr)[1]','nvarchar(max)')
print @stmt
-- Переводы строк потеряли
6 ноя 13, 10:46    [15082843]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить текст из XML_я ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
declare @xml xml, @stmt varchar(max)
set @xml = N'
<Root>
  <Node Attr="Attr 1&#10;&#13;Attr 2&#10;&#13;Attr 3" />
</Root>
'
select @xml
select @stmt = @xml.value( '(Root/Node/@Attr)[1]', 'nvarchar(max)' )
print @stmt
6 ноя 13, 10:58    [15082918]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить текст из XML_я ?  [new]
Greenhorn
Member

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

Спасибо
Решение:
select @xml = cast(REPLACE(REPLACE(@stmt, char(13), '&#13;'), char(10), '&#10;') as xml)
6 ноя 13, 11:18    [15083097]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить