powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Xml parser библиотека для C/C++
8 сообщений из 83, страница 4 из 4
Xml parser библиотека для C/C++
    #38986376
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvik, кстати это прекрасный повод обсудить поведение поточного (streamable) XML-парсера.

Как ты думаешь. А?
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38986470
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДавайте возьмём его за основу как некое ТЗ и получим хотя-бы последовательность точек
широты и долготы.
Сразу говорю это всего лишь первый эскиз ...

Скорее всего должен быть некий tools, который проанализировав xml создаст meta данные

"<metadata>", "class"

"<link>", "struct"
"href", "URL"
"text", "string"
"</link>"

"time", "time"

"/<metadata>"

"<trk>", "class"

"name", "string"

"<extensions>", "struct"

"<gpxx:TrackExtension>", ""
"gpxx:DisplayColorr", "string"
"</gpxx:TrackExtension>"

"/<extensions>"

"<trkseg>", "vector"

"<trkpt>", "struct"
"lat", "double"
"lom", "double"
"ele", "double"
"time", "time"
"</trkpt>"

"</trkseg>"

"</trk>"
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38986747
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012 Сразу говорю это всего лишь первый эскиз ...

Скорее всего должен быть некий tools, который проанализировав xml создаст meta данные

Зачем тулз? Я говорю об обыкновенном usecase анализатора о котором писал топик-стартер.

Разве он что-то говорил о тулзе?

Давайте хором сядем и напишем этот юзкейс и осмотрим и обгрызём со всех сторон его
чтоб понять все недостатки предлагаемой методики. Я нарочно взял простой документ
где нет контекста и отношения parent-child между тегами не меняют семантики.
Он плоский. По сути это CSV.

Нам даже не важна вложенность. Можем обрабатывать только события открытия тега trkpt
и его атрибутов. И игнорировать всё остальное.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38986763
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0637maytonЗачем тулз?
Вообщем то согласен.
Для начала можно потренироваться на "ручных" meta данных, а затем уже навесить всяких "рюшечек" /например tools .../.

Как тебе видится формат представления meta данных /авторский мне что-то не сильно нравится/?
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38986840
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Моё видение будет полным когда я увижу usecase. К сожалению
у меня есть опасение что я что-то не увидел красивое и прекрасное
в идеях автора и поэтому хочу постоять в сторонке и посмотреть
как мемберы это реализуют а потом уж высказать свою ИМХУ.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38987137
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДавайте хором сядем и напишем этот юзкейс и осмотрим и обгрызём со всех сторон его
чтоб понять все недостатки предлагаемой методики. Я нарочно взял простой документ
где нет контекста и отношения parent-child между тегами не меняют семантики.
Он плоский. По сути это CSV.

Нам даже не важна вложенность. Можем обрабатывать только события открытия тега trkpt
и его атрибутов. И игнорировать всё остальное.

У меня сразу были мысли в этом же направлении. Плоский документ обрабатывать легко хоть с помощью StAX-парсера (пример с которым я привёл), хоть задавая способ его обработки "таблицей" (способ автора).
Но даже с простым изначальным xml мне пришлось вызывать Inspect отдельно в каждой ветке if, для продвижения к содержимому узла. При этом не сделана проверка на возможные ошибки. Добавить их - код разрастётся.

А вот если будут сложные отношения между узлами, да хотя бы узлы с одинаковыми именами на разных уровнях вложенности - тут становится интересней. Например, вот в этой теме пытаются задать схему для сложных связей. Чтобы проверять подобные связи при парсинге - нужен уже не простой однопроходный парсер. Ну или придётся сохранять значения и реагировать далее по ходу разбора.
Впрочем, валидация - это, наверное, отдельная тема.

Способ автора. Тут тоже много проблем.
Если версия документа меняется - добавляются/удаляются узлы, изменяется их вложенность, то нужно будет вручную в "таблице" изменять параметры - легко запутаться. А ошибка выявится лишь в рантайме. Имхо, неудобный это способ.
Опять же, неясно, как задавать неймспейсы, буде они в xml.

И да, хотелось бы увидеть юзкейс.
Я всё-таки думаю, что эта "таблица" - выхлоп кодогенератора.


Вот тут 17774948 Владимир2012 писал:Владимир2012 2-й подход - run time принятие данных.

Этот подход мне больше нравится, но его реализация будет скорее всего намного сложнее.
Это сложно в нативных языках. А, например, в .NET XmlSerializer так и работает: в рантайме, пользуясь метаданными, создаёт парсер на лету (однако, можно и предварительно создать нужную сборку, для повышения производительности), и десериализует данные из xml в набор классов (который можно предварительно автоматически сгенерировать).
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38987202
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кодогенератор это что? Взять xml-схему из шапки - и накидать over 9000 функций
которые на самом деле не нужны и представляют собой некую "возможность" ?

Для моей задачи которую я озвучил. То бишь получить список географических координат
какая польза в кодо-генераторе?
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38987280
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКодогенератор это что? Взять xml-схему из шапки - и накидать over 9000 функций
которые на самом деле не нужны и представляют собой некую "возможность" ?
Можно придумывать десятки разных кодогенераторов, которые будут разными путями решать задачи перевода
данных из xml представления в native формат программы.
Вот экспромтом приведу два варианта.

1-й вариант
--------------
Согласно meta данных генерируется код в стиле notepad++ /см. Parameters.cpp и Parameters.h/.
Это вполне реально сделать.

2-й вариант
--------------
Кодогенератор не создает дюжину функций, а формирует "плоский" код.
Т.е. анализируем meta данные и формируем код для каждой логического блока meta данных.

Что такое логический блок?
Как говорится "Лучше один раз увидеть, чем сто раз услышать"

---------- Логический блок -------------------

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
"<metadata>", "class"

"<link>", "struct"
"href", "URL"
"text", "string"
"</link>"

"time", "time"

"/<metadata>" 



---------- Логический блок -------------------
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
"<trk>", "class"

"name", "string"

"<extensions>", "struct" 

"<gpxx:TrackExtension>", ""
"gpxx:DisplayColorr", "string"
"</gpxx:TrackExtension>"

"/<extensions>"

"<trkseg>", "vector"

"<trkpt>", "struct"
"lat", "double"
"lom", "double"
"ele", "double"
"time", "time"
"</trkpt>"

"</trkseg>"

"</trk>"



В приведенный пример meta данных надо правда добавить данные об native данных в которые нужно
поместить данные из xml.
Задача вполне решаема, но скорее всего потрудиться для ее реализации придется не мало.

В чем выгода?
Программист не будет "вручную" выписывать 4000 строк ...
Скажу ранее был позитивный опыт разработки генератора отчетов, который на основании meta данных генерировал
исходный текст программы, которая позволяла сформировать отчет.
Честно скажу - не жалею о проделанной работе /сэкономил в разы больше времени, чем потратил на разработку/.

PS: "Искусство требует жертв".
...
Рейтинг: 0 / 0
8 сообщений из 83, страница 4 из 4
Форумы / C++ [игнор отключен] [закрыт для гостей] / Xml parser библиотека для C/C++
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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