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

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

Есть задача, которую мне пока решить не удалось, даже поиском ответа по многим ресурсам.

1. Есть таблица COMMENT, с полями: ID(int), ParentID(int), Text(text).
В поле "Text" хранится выражение xml (<elements><element date="26.08.2013 12:41:45" id="16" str="1"><userid>123</userid><comment>Для теста xml</comment></element></elements>)
Запросом из таблицы:
select text from comment where parentid = 23 from xml auto
получаю результат:
<Comment text="<elements><element date="26.08.2013 12:41:45" id="16" str="1"><userid>123</userid><comment>Для теста xml</comment></element></elements>
�"/>

2. Далее я отсекаю ненужное, заменяю символы и получаю очищенное выражение для вставки в другую таблицу в поле, которое имеет нормальный xml формат.
Т.е. в таблице COMMENT2 с полями ID(int), ParentID(int), Comm(xml), после insert выражение уже выглядит структурировано:
<elements>
<element date="26.08.2013 12:41:45" id="16" str="1">
<userid>123</userid>
<comment>Для теста xml</comment>
</element>
</elements>

3. Обработав это выражение, добавив новый элемент и прочее, получил готовое выражение для того, чтобы вставить его обратно в первую таблицу. А как следует из рассказа, первая таблица с нужным полем имеет формат text и напрямую конвертировать xml в текст нельзя.

Отсюда и возник вопрос: как же обработать xml выражение, превратив все это выражение в текст, который можно было бы вставить в первую таблицу?

Буду признателен за варианты.

С уважением.
29 авг 13, 18:20    [14772629]     Ответить | Цитировать Сообщить модератору
 Re: Конвертация xml в text  [new]
Artemy_ch
Member

Откуда:
Сообщений: 23
Форум подрезал выражение, удалив все символы, которые были в результате выгрузки xml из текстового поля.

Попробую вставить снова:

<Comment text="&lt;elements&gt;&lt;element date=&quot;26.08.2013 12:41:45&quot; id=&quot;16&quot; str=&quot;1&quot;&gt;&lt;userid&gt;123&lt;/userid&gt;&lt;comment&gt;Для теста xml&lt;/comment&gt;&lt;/element&gt;&lt;/elements&gt;&#x0D;&#x0A;&#x00;"/>
29 авг 13, 18:25    [14772651]     Ответить | Цитировать Сообщить модератору
 Re: Конвертация xml в text  [new]
Ennor Tiegael
Member

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

select cast(cast(Text as varchar(max)) as xml)
Если в исходном поле XML корректный, разумеется.
29 авг 13, 18:28    [14772664]     Ответить | Цитировать Сообщить модератору
 Re: Конвертация xml в text  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Artemy_ch
напрямую конвертировать xml в текст нельзя

Конвертируйте напрямую в varchar(max).
29 авг 13, 18:30    [14772671]     Ответить | Цитировать Сообщить модератору
 Re: Конвертация xml в text  [new]
Ennor Tiegael
Member

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

А, вам обратно в text вставить надо. Ну все равно, тот же принцип - через промежуточный каст в varchar(max).
29 авг 13, 18:32    [14772684]     Ответить | Цитировать Сообщить модератору
 Re: Конвертация xml в text  [new]
Artemy_ch
Member

Откуда:
Сообщений: 23
Ennor Tiegael,

Добрый день.

Да, мне необходимо нормальное выражение xml из ячейки с типом xml вставить все это в ячейку с типом text.

Пробовал брать переменную, в которой все это выражение и конвертировать через cast'ы:
set @xVar =  Cast(Cast(@xVar as varchar(max)) as varchar(max))


Но на выходе получаю тот же xml и в текстовое поле таблицы выражение не вставляется, ругается:
"Msg 206, Level 16, State 2, Line 55
Конфликт типов операндов: xml несовместим с text"

Может попробовать через временную таблицу с полем типа varchar, проапдейтив ее с одним cast, а уже оттуда забрать выражение в основную таблицу?

Спасибо.

С уважением.
30 авг 13, 09:12    [14774115]     Ответить | Цитировать Сообщить модератору
 Re: Конвертация xml в text  [new]
Glory
Member

Откуда:
Сообщений: 104760
Artemy_ch
Да, мне необходимо нормальное выражение xml из ячейки с типом xml вставить все это в ячейку с типом text.

Пробовал брать переменную, в которой все это выражение и конвертировать через cast'ы:
set @xVar =  Cast(Cast(@xVar as varchar(max)) as varchar(max))


Но на выходе получаю тот же xml и в текстовое поле таблицы выражение не вставляется, ругается:
"Msg 206, Level 16, State 2, Line 55
Конфликт типов операндов: xml несовместим с text"

А вы хотели, чтобы переменная @xVar типа xml после конвертации стала вдруг varchar ??

declare @xVar xml
declare @y varchar(max)
set @y =  Cast(@xVar as varchar(max))
30 авг 13, 09:36    [14774209]     Ответить | Цитировать Сообщить модератору
 Re: Конвертация xml в text  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Artemy_ch
\Cast(Cast(@xVar as varchar(max)) as varchar(max))

Типа, сервер туповат и с первого раза не понимает, что нужно конвертировать в varchar(max)? :-)

Artemy_ch
Да, мне необходимо нормальное выражение xml из ячейки с типом xml вставить все это в ячейку с типом text.

declare @a table(x xml);
declare @b table(t text);

insert @a (x)
select (select * from sys.objects for xml auto);

insert @b (t)
select cast(x as varchar(max))
from @a;

select * from @a;
select * from @b;
30 авг 13, 09:37    [14774214]     Ответить | Цитировать Сообщить модератору
 Re: Конвертация xml в text  [new]
Artemy_ch
Member

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

Да, действительно, я упустил этот момент, что надо через другую переменную. Каюсь, был невнимателен!

Премного благодарен за наводку.

Гость333,

И Ваш вариант очень нагляден и не вызывает вопросов.

Спасибо большое!

С уважением.
30 авг 13, 11:58    [14775264]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить