Страница 1 из 1

XML по-русски

Добавлено: 19 Октябрь 2017, 13:48
Constantine
Ситуация: С10, АВС.
Нужно импортировать XML-файл с тегами на русском языке. Использую IQXML. Не находит ни одного тега. В файле кодировка Windows-1251.
По-английски - работает...
Как победить?
Спасибо!

XML по-русски

Добавлено: 19 Октябрь 2017, 14:44
Yufil

XML по-русски

Добавлено: 19 Октябрь 2017, 14:59
Constantine
Спасибо!
Кое-какие функции заработали при указании имен в нижнем регистре (маленькими буквами)... :-) Покопаю в эту сторону.

XML по-русски

Добавлено: 19 Октябрь 2017, 15:05
Yufil
Все равно IQXML не лучший вариант. Есть в Кларионе встроенный парсер cpxml.dll, к сожалению, не поддерживающий кириллицу (по крайней мере, в CW6 не работал). Поэтому сначала надо перевести файл в utf-8, а потом парсить.

Правда, есть ещё способ - шестнадцатеричным редактором поправить DLL (делал когда-то) тогда будет работать с кириллицей, но какие-то буквы в тегах не принимаются.

XML по-русски

Добавлено: 19 Октябрь 2017, 21:21
Игорь Столяров
Constantine писал(а): 19 Октябрь 2017, 13:48 В файле кодировка Windows-1251.
Если задача рабочая - посмотри EasyXML, насколько помню там с кириллицей проблем нет ...
Если побаловаться или много времени, то можно зайти через конвертацию файла в UTF-8.

Конкретно про iqXML. Продукт сдох. Последняя адекватная версия от 25.05.2016 г., а далее масса проблем.
В своё время долго (2010 - 2014) разбирался с автором по поводу загрузки русских букв, многое тогда удалось сделать ...
Заодно и английский вспомнил. :) И в каждом обновлении, что-то отваливалось ... :(
Сейчас все проекты переписали на ClarionXML, тоже не подарок, но работает адекватно.

XML по-русски

Добавлено: 20 Октябрь 2017, 9:11
finsoftrz
Я разбираю xml через генерацию vbscript, который использует родной ms парсер. При этом создается пара временных файлов (скрипт и результат разбора, который автоматически затягивается в очередь/группу в кларионовской программе). В остальном проблем никаких, в приложении всего вызов одного метода класса, главное задать имена полей в очереди/группе, соответствующие тэгам в xml файле.

XML по-русски

Добавлено: 20 Октябрь 2017, 9:45
Yufil
А если XML имеет сложную иерархическую структуру, содержит секции CDATA, комменты и всё такое ?
В принципе, есть шаблон ViewXML, он грузит XML в очередь и показывает ея на странице.
По этому образцу легко сделать парсинг, ссылки на который привёл выше.
Проблемы две: принимается только UTF-8 и результаты парсинга выводятся в этой же кодировке.
Но и это решаемо.

У меня в обучающих программах в XML хранятся шаблоны экранов, тесты, отчёты о тестировании, сессии (текущий статус), разного рода данные для тестов. XML пишется в Blob, Blob пакуется через Zlib, архив пишется в TPS. И вот там-то и есть смерть Кощеева :)

XML по-русски

Добавлено: 20 Октябрь 2017, 12:43
finsoftrz
Да, в общем, без разницы. MS парсером преобразуем xml в линейную структуру и забираем в кларионовское приложение. Для конкретных сложных ситуаций прописываем метод в классе. А примеры разбора на vbscript находим в интернете, где оно всегда есть. Конечно, не всегда охота использовать временные файлы, но чтобы не бодаться с разными библиотеками в кларионе и нужно быстро найти решение, вариант...

XML по-русски

Добавлено: 20 Октябрь 2017, 16:55
Constantine
Итак, итоги...
Спасибо всем, все получилось.
Последнюю версию IQXML брал с сайта. Под С10 отработала нормально. С русским языком, на самом деле, все нормально, но есть особенности:
1. Все параметры передаются и возвращаются в нижнем регистре.
2. Поля нумеруются СПРАВА НАЛЕВО.
3. Соответственно, курсор для перемещения по полям нужно УВЕЛИЧИВАТЬ, а не уменьшать. При этом, по документу он будет сдвигаться на одну позицию ВЛЕВО. Т.е., позиционируем курсор на нужный узел, увеличиваем его (+) на количество полей, а затем уменьшаем его на 1 для перемещения по полям.
4. Считать в Queue пока не пробовал, хотя русские имена полей Clarion проглотил, попробую позже. Пользовался xml:FindNextNode/xml:ReadCurrentRecord/XML:SetPointer.

Вывод: для не особо сложных файлов вполне сойдет.
Другие рекомендации обязательно попробую позже и отпишусь.
Еще раз всем СПАСИБО!