powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Помогите распарсить XML///
2 сообщений из 2, страница 1 из 1
Помогите распарсить XML///
    #38034668
Фотография sasha27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
День добрый.
SyBase ASA 12
Поставлена следующая задачка...
Вытащить значения CDATA и приведенного XML:
В интерактиве выполняю следующий код

begin
declare @xml xml;
declare @name_post varchar(20);
declare @B_number varchar(100);

set @xml = '<EXTERNAL_DELIVERY>
<NAME>QIWI POST</NAME>
<BARCODE_NUMBER>10905200065651</BARCODE_NUMBER>
<BARCODE_STANDARD>EAN-128</BARCODE_STANDARD>
<ADDITIONAL_DATA>
<DATA code="PACK_TYPE" title="Типоразмер"><![CDATA[C]]></DATA>
<DATA code="TERMINAL_CODE" title="Код терминала"><![CDATA[MSC_039]]></DATA>
</ADDITIONAL_DATA>
</EXTERNAL_DELIVERY>';

SELECT * into #Orders FROM OPENXML(@xml, '/EXTERNAL_DELIVERY/ADDITIONAL_DATA/DATA')
WITH ("id" integer '@mp:id',
parent_id integer '../@mp:id',
code varchar(50) '@code',
title varchar(50) '@title',
DATA varchar(150)'DATA');

select * from #Orders;

end;

как видно значание 1-го CDATA это 'С', второго 'MSC_039'.

После селекта получаю 2 строки
Все замечательно, но как сделать, чтобы и значения CDATA были тут же.
id, parent_id, code, title, DATA
268, 236, 'PACK_TYPE', 'Типоразмер',
355, 236, 'TERMINAL_CODE', 'Код терминала',

Заранее благодарен.
...
Рейтинг: 0 / 0
Помогите распарсить XML///
    #38034891
Фотография sasha27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разобрался, надо вот так:

begin
declare @xml xml;
declare @name_post varchar(20);
declare @B_number varchar(100);

set @xml = '<EXTERNAL_DELIVERY>
<NAME>QIWI POST</NAME>
<BARCODE_NUMBER>10905200065651</BARCODE_NUMBER>
<BARCODE_STANDARD>EAN-128</BARCODE_STANDARD>
<ADDITIONAL_DATA>
<DATA code="PACK_TYPE" title="Типоразмер"><![CDATA[C]]></DATA>
<DATA code="TERMINAL_CODE" title="Код терминала"><![CDATA[MSC_039]]></DATA>
</ADDITIONAL_DATA>
</EXTERNAL_DELIVERY>';

SELECT * into #Orders FROM OPENXML(@xml, '/EXTERNAL_DELIVERY/ADDITIONAL_DATA/DATA')
WITH ("id" integer '@mp:id',
parent_id integer '../@mp:id',
code varchar(50) '@code',
title varchar(50) '@title',
"DATA" varchar(150) '.'); // ставится точка и тогда читаютcя данные из CDATA текущего узла

select * from #Orders;

end;
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Помогите распарсить XML///
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]