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

Откуда: glubinka
Сообщений: 4256
почему такой разный результат?

        
select val from 
        (
            select * from 
            (
                SELECT 1 AS Tag, 0 AS Parent, ''   AS [add_info_format!1], null AS [add_info!2], null AS [add_info!2!body!CDATA]
                UNION ALL
                SELECT 2 as Tag, 1 as Parent, null AS [add_info_format!1], ''   AS [add_info!2]
                    ,N'Открытое письмо' AS [add_info!2!body!CDATA]
            ) t FOR XML EXPLICIT, BINARY BASE64
        )x(val) 


<add_info_format><add_info><body><![CDATA[Открытое письмо]]></body></add_info></add_info_format>


declare @val xml = 
(
        select val from 
        (
            select * from 
            (
                SELECT 1 AS Tag, 0 AS Parent, ''   AS [add_info_format!1], null AS [add_info!2], null AS [add_info!2!body!CDATA]
                UNION ALL
                SELECT 2 as Tag, 1 as Parent, null AS [add_info_format!1], ''   AS [add_info!2]
                    ,N'Открытое письмо' AS [add_info!2!body!CDATA]
            ) t FOR XML EXPLICIT, BINARY BASE64
        )x(val) 
);
select @val


<add_info_format><add_info><body>Открытое письмо</body> </add_info></add_info_format>
19 сен 19, 22:09    [21974745]     Ответить | Цитировать Сообщить модератору
 Re: потеря CDATA секции  [new]
invm
Member

Откуда: Москва
Сообщений: 9349
При конвертации в xml CDATA преобразуется в текст с escape-последовательностями.
declare @val varchar(max) = 
(
        select val from 
        (
            select * from 
            (
                SELECT 1 AS Tag, 0 AS Parent, ''   AS [add_info_format!1], null AS [add_info!2], null AS [add_info!2!!CDATA]
                UNION ALL
                SELECT 2 as Tag, 1 as Parent, null AS [add_info_format!1], ''   AS [add_info!2]
                    ,N'<Открытое письмо>' AS [add_info!2!!CDATA]
            ) t FOR XML EXPLICIT, BINARY BASE64
        )x(val) 
);

select @val, cast(@val as xml);


Нужна CDATA - не конвертируйте в xml.
19 сен 19, 23:25    [21974801]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить