Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / OpenXML в ASA / 4 сообщений из 4, страница 1 из 1
23.12.2009, 01:50
    #36381163
iLLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OpenXML в ASA
Не могу разобраться, как мне еще нужно попрыгать с бубном, чтобы достичь цель. Есть XML:
<a><b>test1</b><c>a&quot;test3</c></a>

Выполняем запрос:

SELECT *
FROM OPENXML( '<a><b>test1</b><c>&quot;test3</c></a>', '//*' )
WITH (id INT '@mp:id',
parent INT '../@mp:id',
name CHAR(20) '@mp:localname',
text LONG VARCHAR 'text()',
node LONG VARCHAR 'node()',
point LONG VARCHAR '.')
order by id
(оформление специально не включал, т.к. пропадает ключевой момент)

Получаем результат:
idparentnametextnodepoint2(NULL)a(NULL)test1test1a"test352btest1test1test1172caaa"test3
А всего-то мне нужно вместо последних трех получить такой столбец:
result(NULL)test1a"test3

Насколько я знаю, передача в XML тегах значений вида &quot; нормальна, однако АСА ее съедает. Более того, если в тексте стоит &raquo;, то вообще вылезает ошибка парсера. Как наименьшими телодвижениями нормально распарсить здоровенный XML на ASA?
...
Рейтинг: 0 / 0
23.12.2009, 09:53
    #36381402
Sergey Orlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OpenXML в ASA
iLLer,

Мне кажется у вас неправильное понятие XML
У вас
<a>
<b>test1</b>
<c>a"test3</c>
</a>
т.е. должна выдаться строка с 2-мя столбцами нечто типа test1, a"test3
А для получения 2-х строк с одним столбцом должно быть нечто
<a>
<b>test1</b>
<b>a"test3</b>
</a>
...
Рейтинг: 0 / 0
23.12.2009, 12:33
    #36381871
iLLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OpenXML в ASA
Sergey Orlov,

Да не, со структорой все нормально. Есть некий сложный документ, с неопределенным на этапе проектирования количеством уровней вложенных тэгов. Обработать такой документ можно только посредством такого запроса, но есть сложность с получением данных из него.
Проблема заключается в знаке двойной кавычки, который внутри тэга пишется через &quot;, а не в виде ". Вот суть вопроса в том, что если осуществлять доступ к данным в тэге через функцию text(), то она возвращает только текст до такой кавычки. Если же использовать точку, для ссылания на текущий узел, то она возвращает из данного тэга все данные, но есть сторонний эффект, когда на более верхних уровнях она притаскивает данные из всех вложенных тэгов, и отделить мух от котлет становится сложно.
Я так подозреваю, что это косяк со стороны АСА, ведь либо должна быть функция для доступа к сырым данным, либо функция text() должна возвращать все, что заключено внутри тэга, а не только то, что нравится.

P.S.: И уж тем более не понятно почему нельзя использовать внутри xml &raquo; и &laquo;
...
Рейтинг: 0 / 0
24.12.2009, 16:49
    #36385015
iLLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OpenXML в ASA
Вот что нарыл на sybase
http://www.sybase.com/detail?id=1040663
Следуя этому документу, некоторые последовательности символов парсер воспринимает по своему и начинает пилить текстовую строку. Для получения всех данных рекомендуют использовать точку.

Но как обойти тот факт, что при использовании точки тянуться данные от всех вложенных узлов?
Да и вообще, что это за беспредел такой?
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / OpenXML в ASA / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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