Страница 3 из 3
АктСвер 3.01
Добавлено: 01 Декабрь 2020, 20:23
Игорь Столяров
finsoftrz писал(а): ↑01 Декабрь 2020, 19:54
Посмотрел, понюхал. Супер, спасибо, но нет.
А вот скажите пожалуйста ответ на такой незамысловатый вопрос.
Есть некий обмен с девайсом, сервисом (тот же Veteis.API) в XML.
Причём там 40-50 вариантов типовых ответов (структур данных).
И Вы под каждую будите писать отдельный скрипт, который её парсит ?
АктСвер 3.01
Добавлено: 01 Декабрь 2020, 20:46
finsoftrz
Не совсем понимаю вопрос и что предлагается в виде его решения.
В ветисе передается много избыточных значений, которые не используются. Если пытаться все это реализовывать у себя, то будет сизифов труд. Я в этом случае предпочитаю иметь инструмент, позволяющий быстро реализовывать функционал, а дальше реагировать на запросы пользователей.
АктСвер 3.01
Добавлено: 01 Декабрь 2020, 21:04
Игорь Столяров
Конкретно Ветис.API приведён просто в качестве примера, вряд ли кому-то нужно
распарсивать (да и вообще разбираться) со всеми его структурами данных ...
Я спросил потому, что для штатного XML парсера Clarion вполне можно сделать метод,
в который передаётся некий XML файл и очередь (в которой задана структура данных
и наименования тегов). Результат работы такого метода заполненная из XML очередь.
Чем-то похоже на штатный распарс JSON, тоже с оговорками, но в целом универсально.
АктСвер 3.01
Добавлено: 01 Декабрь 2020, 21:39
finsoftrz
Что-то опять не понимаю. Я так и делаю. Только в метод класса передается не имя файла и очередь, а наименование якорного узла и очередь. Имя файла передается при инициализации класса.
АктСвер 3.01
Добавлено: 01 Декабрь 2020, 21:45
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.
АктСвер 3.01
Добавлено: 01 Декабрь 2020, 21:56
Yufil
Игорь Столяров писал(а): ↑01 Декабрь 2020, 21:04
Конкретно Ветис.API приведён просто в качестве примера, вряд ли кому-то нужно
распарсивать (да и вообще разбираться) со всеми его структурами данных ...
Я спросил потому, что для штатного XML парсера Clarion вполне можно сделать метод,
в который передаётся некий XML файл и очередь (в которой задана структура данных
и наименования тегов). Результат работы такого метода заполненная из XML очередь.
Чем-то похоже на штатный распарс JSON, тоже с оговорками, но в целом универсально.
По идее - да, придумать некий декларативный язык, описывающий схему преобразования - какой параметр в какое поле очереди укладывается и какой тэг вызывает добавление записи к очереди. Дело хорошее...
АктСвер 3.01
Добавлено: 02 Декабрь 2020, 8:33
finsoftrz
В общем, как я понял, стандартный кларионовский парсер использует старую сишную библиотеку, написанную в 90-х, поэтому не поддерживает методы работы с xml, которые появились позже (в частности, xpath). А какие еще проблемы при его использовании? Почему-то, например, Парези и прочие вместо него стали разрабатывать альтернативные решения. Когда-то было обсуждение, я тогда не заострил внимание.
АктСвер 3.01
Добавлено: 02 Декабрь 2020, 9:02
Игорь Столяров
finsoftrz писал(а): ↑02 Декабрь 2020, 8:33
Почему-то, например, Парези и прочие
Я одно время достаточно живо переписывался с г-ном PARESI, т.к. его парсер имел кучу глюков при работе с русскими
текстами, а сам автор не имел представления о русском языке вообще и кириллице в частности.
Как он объяснял - главное для него скорость распарса. Он заострял внимание, что читает/записывает XML через DOS
драйвер (хотя я тогда ещё делал это через WinAPI в 2 раза быстрее). Ну и достаточно неплохой отладочный сервис,
который конечно намного превосходит Debug штатного парсера (хотя идея та же).
АктСвер 3.01
Добавлено: 02 Декабрь 2020, 9:18
finsoftrz
А через что читает штатный? Как я представляю, если сишная библиотека, то через win api. Почему у него через dos драйвер быстрее?
В iqxml, если не ошибаюсь, весь файл заливался в строку, а потом класс по ней лазил. Может, в стандартном какая-то более сложная структура в памяти создается, поэтому медленнее получается. Утечек памяти на больших файлах не наблюдается?
АктСвер 3.01
Добавлено: 02 Декабрь 2020, 9:28
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 начинает поддерживаться
Посмотрел свои архивы, первое найденное упоминание относится к 2006 году...
АктСвер 3.01
Добавлено: 02 Декабрь 2020, 9:45
finsoftrz
Кстати, да, только в С6. Меня смутило то, что в статье в кларионмаге упоминалось, что topspeed лицензировали сишную библиотеку. А последним продуктом topspeed был С5 в 1999 году. С55 и далее уже под лейбом SV.
АктСвер 3.01 (Чтение XML)
Добавлено: 12 Апрель 2021, 9:38
Admin
Я в прошлый раз так и не добил тему чтения XML средствами Clarion.
Напомните пожалуйста. Как подобный (как часть внизу) XML читается?
В UTF-8 перекодировал.
Грузится, но ListXML.Node.getNodename() возвращает XXXXX вместо русских имен.
Код: Выделить всё
<?xml version="1.0" encoding="
<Файл ИдФайл="ON_NSCHFDOPPR_2B
<СвУчДокОбор ИдОтпр="2BM-5
<СвОЭДОтпр НаимОрг="АО
</СвУчДокОбор>
<Документ КНД="1115131" Фу
<СвСчФакт НомерСчФ="40
<СвПрод ОКПО="1905
<ИдСв>
<СвЮЛУч На
</ИдСв>
<Адрес>
<АдрИнф Ко
</Адрес>
<Контакт Тлф="
<БанкРекв Номе
АктСвер 3.01 (Чтение XML)
Добавлено: 12 Апрель 2021, 9:51
Admin
Вопрос наверное закрыт... Yufil как то писал ранее:
Yufil писал(а):Правда, есть ещё способ - шестнадцатеричным редактором поправить DLL (делал когда-то) тогда будет работать с кириллицей, но какие-то буквы в тегах не принимаются.