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

Откуда: Гусь-Хрустальный
Сообщений: 556
При таком запросе
SELECT *
FROM OPENXML (@DocHandle, '/root/Product', 3)
WITH (ID varchar(10), oID char(10), NewTxt VARCHAR(200))

импортируются данные из такого набора
<Product ID="30239" oID="   ФЫВ1ВЫФ"><NewTxt>ывоарповарповрыопаро</NewTxt></Product>

(я одну запись скопировал, чтобы весь не загружать).

Значение oID заключено в кавычки. При импорте ВАЖНО сохранить начальные пробелы.
А скуль (2005) их режет.
Как настроить, чтоб не отрезалось?
22 ноя 12, 12:03    [13512111]     Ответить | Цитировать Сообщить модератору
 Re: При импорте из XML отрезаются начальные пробелы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31952
Max-xaM
А скуль (2005) их режет.
ИМХО это проблема несоответствия XML сандарту, а не ошибка в работе сиквела.

http://www.w3.org/TR/1998/REC-xml-19980210
3.3.3 Attribute-Value Normalization

Before the value of an attribute is passed to the application or checked for validity, the XML processor must normalize it as follows:
a character reference is processed by appending the referenced character to the attribute value
an entity reference is processed by recursively processing the replacement text of the entity
a whitespace character (#x20, #xD, #xA, #x9) is processed by appending #x20 to the normalized value, except that only a single #x20 is appended for a "#xD#xA" sequence that is part of an external parsed entity or the literal entity value of an internal parsed entity
other characters are processed by appending them to the normalized value

If the declared value is not CDATA, then the XML processor must further process the normalized attribute value by discarding any leading and trailing space (#x20) characters, and by replacing sequences of space (#x20) characters by a single space (#x20) character.

All attributes for which no declaration has been read should be treated by a non-validating parser as if declared CDATA.
22 ноя 12, 12:24    [13512252]     Ответить | Цитировать Сообщить модератору
 Re: При импорте из XML отрезаются начальные пробелы  [new]
Max-xaM
Member

Откуда: Гусь-Хрустальный
Сообщений: 556
Вопрос в том, что мне посоветуете, чтобы пробелы сохранились?

Может при экспорте их заменить на какой-нибудь спецсимвол, чтобы при импорте обратно конвертнуть?
22 ноя 12, 12:38    [13512369]     Ответить | Цитировать Сообщить модератору
 Re: При импорте из XML отрезаются начальные пробелы  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Max-xaM,

Наверно, сохранить (загружать) в поле с типом varchar(max).
А затем, разбирать

ссылка
SELECT CONVERT(xml, N'<root>      <child/>     </root>', 1)
22 ноя 12, 12:56    [13512562]     Ответить | Цитировать Сообщить модератору
 Re: При импорте из XML отрезаются начальные пробелы  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Max-xaM,

Может, так попробовать?
DECLARE @doc XML;
SET @doc = N'<root><Product ID="30239" oID="   ФЫВ1ВЫФ"><NewTxt>ывоарповарповрыопаро</NewTxt></Product></root>';
SELECT d.val.value('@ID', 'VARCHAR(10)') AS ID,
       d.val.value('@oID', 'CHAR(10)') AS oID,
       d.val.value('NewTxt[1]', 'VARCHAR(200)') AS NewTxt
FROM @doc.nodes('/root/Product') d(val);
22 ноя 12, 13:17    [13512721]     Ответить | Цитировать Сообщить модератору
 Re: При импорте из XML отрезаются начальные пробелы  [new]
Max-xaM
Member

Откуда: Гусь-Хрустальный
Сообщений: 556
Гость333
Может, так попробовать?

Шайтан!
Работает. Но я не понимаю код.
То есть теперь я могу исключить из своего кода FROM OPENXML.
Страшновато. Привык я к нему.
22 ноя 12, 13:35    [13512905]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить