SQL Server - Хранение разрывов строк в типе данных XML - PullRequest
2 голосов
/ 05 октября 2009

Можно ли хранить не алфавитно-цифровые символы (точнее символы перевода строки) в типе данных XML?

Код ниже иллюстрирует мою проблему:

declare @a xml
declare @b nvarchar(max)

set @b = '<Entry Attrib="1'+CHAR(13)+'2" />'

print @b

set @a=convert(xml,@b,1)

set @b=convert(nvarchar, @a,1)

print @b

Вывод:

<Entry Attrib="1
2" />
<Entry Attrib="1 2"/>

Можно ли как-нибудь сохранить разрыв строки?

Моя настоящая проблема заключается в том, чтобы сохранить значение в таблице (а не в локальной переменной), так что, может быть, есть некоторые настройки для соответствующего столбца XML в моей таблице, которые бы выполняли эту работу?

Ответы [ 3 ]

2 голосов
/ 06 октября 2009

Мой ответ в контексте XSLT должен применяться здесь:

XML-анализируемые объекты часто хранятся в компьютерных файлах, которые для редактирования удобство, организованы в строки. Эти строки обычно разделяются некоторая комбинация персонажей возврат каретки (#xD) и перевод строки (#XA).

Так что это может быть то, что вы ищете:

set @b = '<Entry Attrib="1&#xA;2" />'
2 голосов
/ 05 октября 2009

Это было бы невозможно. Тип данных XML хранится в виде дерева DOM XML, а не строки.

Вместо этого вам придется хранить его как varchar, если вы хотите сохранить пробелы.

0 голосов
/ 06 октября 2009

Пробел внутри тега XML не считается значимым в соответствии со спецификацией XML и не будет сохранен. Пустое пространство вне элемента будет, однако:

declare @a xml
declare @b nvarchar(max)

set @b = '<Entry Attrib="12"> fo'+CHAR(13)+'o</Entry>'
print @b
set @a=convert(xml,@b,1)
set @b=convert(nvarchar(max), @a,1)
print @b

выведет:

<Entry Attrib="12"> fo
o</Entry>
<Entry Attrib="12"> fo
o</Entry>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...