АктСвер 3.01 (Чтение XML)

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7327
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

АктСвер 3.01

Сообщение Игорь Столяров »

finsoftrz писал(а): 01 Декабрь 2020, 19:54 Посмотрел, понюхал. Супер, спасибо, но нет.
А вот скажите пожалуйста ответ на такой незамысловатый вопрос.
Есть некий обмен с девайсом, сервисом (тот же Veteis.API) в XML.
Причём там 40-50 вариантов типовых ответов (структур данных).
И Вы под каждую будите писать отдельный скрипт, который её парсит ? :(
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4558
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

АктСвер 3.01

Сообщение finsoftrz »

Не совсем понимаю вопрос и что предлагается в виде его решения.
В ветисе передается много избыточных значений, которые не используются. Если пытаться все это реализовывать у себя, то будет сизифов труд. Я в этом случае предпочитаю иметь инструмент, позволяющий быстро реализовывать функционал, а дальше реагировать на запросы пользователей.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7327
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

АктСвер 3.01

Сообщение Игорь Столяров »

Конкретно Ветис.API приведён просто в качестве примера, вряд ли кому-то нужно
распарсивать (да и вообще разбираться) со всеми его структурами данных ... :)

Я спросил потому, что для штатного XML парсера Clarion вполне можно сделать метод,
в который передаётся некий XML файл и очередь (в которой задана структура данных
и наименования тегов). Результат работы такого метода заполненная из XML очередь.
Чем-то похоже на штатный распарс JSON, тоже с оговорками, но в целом универсально.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4558
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

АктСвер 3.01

Сообщение finsoftrz »

Что-то опять не понимаю. Я так и делаю. Только в метод класса передается не имя файла и очередь, а наименование якорного узла и очередь. Имя файла передается при инициализации класса.
C6/C11, ШВС, tps/btrieve.
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

АктСвер 3.01

Сообщение Yufil »

Наткнулся на статейку https://clarionmag.jira.com/wiki/spaces ... ing+Part+1, там есть о реализации clarion xml API, с использованием C++ либы expat https://libexpat.github.io/

What we sometimes forget is that Clarion itself ships with some extensive XML parsing capabilities. Years ago TopSpeed licensed the CenterPoint XML C++ class library (which is itself, reportedly, built on the open source Expat XML parser) and incorporated a wrapper for that library into the Clarion product line.
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

АктСвер 3.01

Сообщение Yufil »

Игорь Столяров писал(а): 01 Декабрь 2020, 21:04 Конкретно Ветис.API приведён просто в качестве примера, вряд ли кому-то нужно
распарсивать (да и вообще разбираться) со всеми его структурами данных ... :)

Я спросил потому, что для штатного XML парсера Clarion вполне можно сделать метод,
в который передаётся некий XML файл и очередь (в которой задана структура данных
и наименования тегов). Результат работы такого метода заполненная из XML очередь.
Чем-то похоже на штатный распарс JSON, тоже с оговорками, но в целом универсально.
По идее - да, придумать некий декларативный язык, описывающий схему преобразования - какой параметр в какое поле очереди укладывается и какой тэг вызывает добавление записи к очереди. Дело хорошее...
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4558
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

АктСвер 3.01

Сообщение finsoftrz »

В общем, как я понял, стандартный кларионовский парсер использует старую сишную библиотеку, написанную в 90-х, поэтому не поддерживает методы работы с xml, которые появились позже (в частности, xpath). А какие еще проблемы при его использовании? Почему-то, например, Парези и прочие вместо него стали разрабатывать альтернативные решения. Когда-то было обсуждение, я тогда не заострил внимание.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7327
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

АктСвер 3.01

Сообщение Игорь Столяров »

finsoftrz писал(а): 02 Декабрь 2020, 8:33 Почему-то, например, Парези и прочие
Я одно время достаточно живо переписывался с г-ном PARESI, т.к. его парсер имел кучу глюков при работе с русскими
текстами, а сам автор не имел представления о русском языке вообще и кириллице в частности. :)
Как он объяснял - главное для него скорость распарса. Он заострял внимание, что читает/записывает XML через DOS
драйвер (хотя я тогда ещё делал это через WinAPI в 2 раза быстрее). Ну и достаточно неплохой отладочный сервис,
который конечно намного превосходит Debug штатного парсера (хотя идея та же). :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4558
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

АктСвер 3.01

Сообщение finsoftrz »

А через что читает штатный? Как я представляю, если сишная библиотека, то через win api. Почему у него через dos драйвер быстрее?
В iqxml, если не ошибаюсь, весь файл заливался в строку, а потом класс по ней лазил. Может, в стандартном какая-то более сложная структура в памяти создается, поэтому медленнее получается. Утечек памяти на больших файлах не наблюдается?
C6/C11, ШВС, tps/btrieve.
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

АктСвер 3.01

Сообщение Yufil »

finsoftrz писал(а): 02 Декабрь 2020, 8:33 В общем, как я понял, стандартный кларионовский парсер использует старую сишную библиотеку, написанную в 90-х, поэтому не поддерживает методы работы с xml, которые появились позже (в частности, xpath). А какие еще проблемы при его использовании? Почему-то, например, Парези и прочие вместо него стали разрабатывать альтернативные решения. Когда-то было обсуждение, я тогда не заострил внимание.
Стандартный парсер появился только в CW6, а iqxml - раньше. А последняя версия Expat вышла два месяца назад...

Expat не поддерживает кодировку windows-1251 ( от слова совсем ), а Кларион - UTF-8 ( от того же слова ). Секции CDATA заменяют '<13,10>' на '<10>' . А в остальном, прекрасная маркиза ...

В принципе, шестнадцатеричным редактором можно поправить модуль clacpxml.dll ( например, поменять 'windows-1250' на 'windows-1251'), тогда windows-1251 начинает поддерживаться :D

Посмотрел свои архивы, первое найденное упоминание относится к 2006 году...
Последний раз редактировалось Yufil 02 Декабрь 2020, 9:47, всего редактировалось 2 раза.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4558
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

АктСвер 3.01

Сообщение finsoftrz »

Кстати, да, только в С6. Меня смутило то, что в статье в кларионмаге упоминалось, что topspeed лицензировали сишную библиотеку. А последним продуктом topspeed был С5 в 1999 году. С55 и далее уже под лейбом SV.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

АктСвер 3.01 (Чтение XML)

Сообщение Admin »

Я в прошлый раз так и не добил тему чтения XML средствами Clarion.
Напомните пожалуйста. Как подобный (как часть внизу) XML читается?
В UTF-8 перекодировал.
Грузится, но ListXML.Node.getNodename() возвращает XXXXX вместо русских имен.

Код: Выделить всё

<?xml version="1.0" encoding="
<Файл ИдФайл="ON_NSCHFDOPPR_2B
	<СвУчДокОбор ИдОтпр="2BM-5
		<СвОЭДОтпр НаимОрг="АО
	</СвУчДокОбор>            
	<Документ КНД="1115131" Фу
		<СвСчФакт НомерСчФ="40
			<СвПрод ОКПО="1905
				<ИдСв>        
					<СвЮЛУч На
				</ИдСв>       
				<Адрес>       
					<АдрИнф Ко
				</Адрес>      
				<Контакт Тлф="
				<БанкРекв Номе
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

АктСвер 3.01 (Чтение XML)

Сообщение Admin »

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