Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
День добрый. Существует- ли какая толковая XML парсер библиотека для C/C++, работающая как под Windows так и под Linux, способная воспринимать структуру XML док в виде таблицы? Например, код мог бы выглядеть так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. Я уже много библиотек посмотрел, но нигде нет возможности работать с такими таблицами. Я уже с такими библиотеками сталкивался до этого, так что знаю что они существуют. Хотелось бы одну такую использовать в своем проекте. Ато самому уже поднадоело писать да и времени нет Заранее благодарю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2015, 23:47 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
dj_raven, Рекомендую не лениться пользоваться поиском в Интернет, прежде чем создавать тему. Например, Google сразу же находит это . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 09:46 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Я это уже видел. Пробегался по сэмплам кода каждой библиотеки, но там все в виде ф-ций сделано. Нет таблиц. Проще самому парсер написать, нежели каждый раз писать новую ф-цию, используя ети библиотеки, по мере дополнения функционала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 13:45 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
dj_ravenПроще самому парсер написать Хозяин - барин, как говорится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 13:48 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
dj_raven, я так понимаю, нужна автоматическая генерация кода? Вот здесь список утилит, генерирующих код (есть и C++) по схеме xml. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 13:50 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Нет, автоматическая генерация кода не нужна. Нужен именно парсер, который умеет процессировать данные по таблицам, которые ты сам пишешь в код, и затем передаешь функции. Она же в свою очередь, идет по этой статической таблице, и смотрит есть ли тэг в полученных данных, если есть, записывает данные в переменную, указанную в таблице для этого тега, если нет, идет дальше. Судя по тому, что, пока-что, никто не понял о чем речь, библиотеки с которыми я сталкивался, были частными наработками. Продолжу писать свой вариант такого парсера :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 15:08 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Не очень понятны ограничения. Зачем длина тега искусственно ограничивается? Что такое SomeConversionFunction? Где ее состояние? Почему она не учитывает контекст? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 15:15 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
dj_ravenСудя по тому, что, пока-что, никто не понял о чем речь Почему же, суть понятна. Вот только подойти к решению задачи можно с разных сторон. В .NET это делается элементарно с помощью XmlSerializer'а (он же deserializer). Сперва генерируем по xml набор классов, потом десериализуем данные, дальше обрабатываем их. А уж какие ConversionFunction использовать - дело десятое. Главное, чтобы было удобно это указать. Хочется в виде таблицы - не вопрос. Вот только я лично не занимаюсь подобным в C++, поэтому не могу подсказать конкретную библиотеку/код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 15:25 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
dj_ravenСуществует- ли какая толковая XML парсер библиотека для C/C++, работающая как под Windows так и под Linux, способная воспринимать структуру XML док в виде таблицы? Что-то типа https://ru.wikipedia.org/wiki/XML-RPC ? /т.е. xml содержит данные для выполнения каких-либо функций/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 15:54 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
maytonНе очень понятны ограничения. Зачем длина тега искусственно ограничивается? Что такое SomeConversionFunction? Где ее состояние? Почему она не учитывает контекст? Может и не ограничиваться, это пример SomeConversionFunction - указатель на ф-цию, которая будет вызываться, вместо стандартной, если не 0. Насчет контекста, это пример, а не актуальный код ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 16:00 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
petalvikdj_ravenСудя по тому, что, пока-что, никто не понял о чем речь Почему же, суть понятна. Вот только подойти к решению задачи можно с разных сторон. В .NET это делается элементарно с помощью XmlSerializer'а (он же deserializer). Сперва генерируем по xml набор классов, потом десериализуем данные, дальше обрабатываем их. А уж какие ConversionFunction использовать - дело десятое. Главное, чтобы было удобно это указать. Хочется в виде таблицы - не вопрос. Вот только я лично не занимаюсь подобным в C++, поэтому не могу подсказать конкретную библиотеку/код. Спасибо за ответ, но у меня проект кросс платформенный, под Linux и Windows. Поэтому нужны или исходники библиотек, чтобы скомпилировать, или установка под линь и винду ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 16:04 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Владимир2012dj_ravenСуществует- ли какая толковая XML парсер библиотека для C/C++, работающая как под Windows так и под Linux, способная воспринимать структуру XML док в виде таблицы? Что-то типа https://ru.wikipedia.org/wiki/XML-RPC ? /т.е. xml содержит данные для выполнения каких-либо функций/ Нет, тоже не то. Как я уже говорил, в парсере должна быть структура, с помощью которой можно описать структуру входящего XML, и указать переменные, куда записать данные, после этого передать в функцию обработки, из этой же библиотеки, чтобы загрузить данные в переменные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 16:09 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
dj_ravenСуществует- ли какая толковая XML парсер библиотека ... способная воспринимать структуру XML док в виде таблицы? Как бы есть одна проблема -- XML -- это не таблица, а дерево тегов. Поэтому такой библиотеки в принципе быть не может. Но, однако, есть например gSOAP, оно такое делает. Но это -- не совсем только лишь парсер XML. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 16:52 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
MasterZivdj_ravenСуществует- ли какая толковая XML парсер библиотека ... способная воспринимать структуру XML док в виде таблицы? Как бы есть одна проблема -- XML -- это не таблица, а дерево тегов. Поэтому такой библиотеки в принципе быть не может. Но, однако, есть например gSOAP, оно такое делает. Но это -- не совсем только лишь парсер XML. Ну, это по вашему мнению такой библиотеки быть не может, хотя, скорей всего, вы не поняли принцип действия, который я описал. я на двух предыдущих работах имел дело с двумя такими библиотеками, и все прекрасно работало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 17:54 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
И что сейчас мешает использовать "библиотеки с двух предыдущих мест работы"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 18:01 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
dj_ravenКак я уже говорил, в парсере должна быть структура, с помощью которой можно описать структуру входящего XML, и указать переменные, куда записать данные, после этого передать в функцию обработки, из этой же библиотеки, чтобы загрузить данные в переменные. На мой взгляд эта задача аналогична следующей. Имеем какие-то диалоговые формы /понятно с своим набором полей/. Диалоговые формы сериализуются. Задача клиента - принять данные xml в какие-то переменные, которые будут использованы одной или несколькими функциями. Оно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 18:04 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovИ что сейчас мешает использовать "библиотеки с двух предыдущих мест работы"? У меня их нет. Поэтому сижу пишу свою, на тех же принципах (не думал что такое понадобится когда нить). Но, если честно, уже поднадоело, потому решил обратиться к народу с вопросом. Может кто знает где достать библиотеки с подобным принципом действия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 18:14 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
dj_ravenBasil A. SidorovИ что сейчас мешает использовать "библиотеки с двух предыдущих мест работы"? У меня их нет. Поэтому сижу пишу свою, на тех же принципах (не думал что такое понадобится когда нить). Но, если честно, уже поднадоело, потому решил обратиться к народу с вопросом. Может кто знает где достать библиотеки с подобным принципом действияНет. Таких библиотек в широком доступе быть не может. XML это дерево . Дерево можно впихнуть в таблицу если принудительно отрезать ему ветки ниже какого-либо уровня. Но это уже будет чрезвычайно зависимо от конкретной задачи и очень не универсально. Именно поэтому никто таких библиотек не делает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 18:19 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
White OwlДерево можно впихнуть в таблицу если принудительно отрезать ему ветки ниже какого-либо уровня. или размножить с другой стороны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 18:27 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Владимир2012dj_ravenКак я уже говорил, в парсере должна быть структура, с помощью которой можно описать структуру входящего XML, и указать переменные, куда записать данные, после этого передать в функцию обработки, из этой же библиотеки, чтобы загрузить данные в переменные. На мой взгляд эта задача аналогична следующей. Имеем какие-то диалоговые формы /понятно с своим набором полей/. Диалоговые формы сериализуются. Задача клиента - принять данные xml в какие-то переменные, которые будут использованы одной или несколькими функциями. Оно? Тоже не то. Попробую еще раз объяснить на примере. Извиняюсь, но все комментарии будут на английском, замучаюсь транслит.нет текст в правильный вид потом переводить XML structure to parse: Код: xml 1. 2. 3. 4. 5. 6. 7. Structure for building xml description table in C/C++: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Definition of the variables to store data: Код: plaintext 1. 2. 3. And here is the table, describing XML structure i have posted above: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. After we have all descriptions of possible incoming xml data, let's process them and fill the variables with data Код: plaintext 1. В обсчем , вот по такому принципы должна работать библиотека, которую мне хотелось бы найти, самому писать, много времени занимает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 18:44 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
И просьба, если не знаете таких библиотек, то луче ничего не пишете, а не пытайтесь меня убедить, что их не может быть в принципе :) Если я её не найду, я её просто напишу сам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 18:47 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
dj_ravenMasterZivпропущено... Как бы есть одна проблема -- XML -- это не таблица, а дерево тегов. Поэтому такой библиотеки в принципе быть не может. Но, однако, есть например gSOAP, оно такое делает. Но это -- не совсем только лишь парсер XML. Ну, это по вашему мнению такой библиотеки быть не может, хотя, скорей всего, вы не поняли принцип действия, который я описал. я на двух предыдущих работах имел дело с двумя такими библиотеками, и все прекрасно работало. я все отлично понял. у тебя есть массив структур, сериализованный в xml, и ты хочешь его десериализовать обратно в память. но еще раз, общая задача парсера xml другая - распарсить любой xml, иначе такой парсер никому будет не нужен, но проблема в том, что xml - это не массив строк, содержащих поля, а дерево тегов произвольной структуры, поэтому такую библиотеку ты не найдешь нигде. ее лучше всего написать самому на базе SAX парсера, или ты можешь взять что-то типа gSOAP, WSDL, описать свои 30 структур и сгенерировать по ним парсеры, и использовать их как библиотеку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 19:07 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
dj_ravenMasterZivпропущено... Как бы есть одна проблема -- XML -- это не таблица, а дерево тегов. Поэтому такой библиотеки в принципе быть не может. Но, однако, есть например gSOAP, оно такое делает. Но это -- не совсем только лишь парсер XML. Ну, это по вашему мнению такой библиотеки быть не может, хотя, скорей всего, вы не поняли принцип действия, который я описал. я на двух предыдущих работах имел дело с двумя такими библиотеками, и все прекрасно работало. я все отлично понял. у тебя есть массив структур, сериализованный в xml, и ты хочешь его десериализовать обратно в память. но еще раз, общая задача парсера xml другая - распарсить любой xml, иначе такой парсер никому будет не нужен, но проблема в том, что xml - это не массив строк, содержащих поля, а дерево тегов произвольной структуры, поэтому такую библиотеку ты не найдешь нигде. ее лучше всего написать самому на базе SAX парсера, или ты можешь взять что-то типа gSOAP, WSDL, описать свои 30 структур и сгенерировать по ним парсеры, и использовать их как библиотеку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 19:09 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
dj_ravenИ просьба, если не знаете таких библиотек, то луче ничего не пишете, а не пытайтесь меня убедить, что их не может быть в принципе :) Если я её не найду, я её просто напишу сам я уверен, что библиотека ваша была доморощенная. в то, что ты ее напишешь, я лично не верю, потому что иначе уже бы написал - там реально делать нечего. но ты похоже на делфи программировал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 19:13 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Странный какой-то XML - с пробелами в именах элементов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 19:15 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Велосипедище ясен пень. Я пытаюсь увидеть какое-то интересное зерно в функции SomeConversionFunction но тщетно. Деревянно как-то и велосипедно. Просто fucken stateless function. Вот Apache Digester красиво реализован мдя... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 19:28 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
dj_ravenAnd here is the table, describing XML structure i have posted above: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Скорее так: ... ... {2, "name", DATATAG, FLDSTR, &name, NULL}, {2, "port", DATATAG, FLDSTR, &port, NULL}, ... ... Ведь name и port это скорее всего переменные в которые ты хочешь принять их значения. И все же еще один вопрос. Судя по приведенному примеру имеем n каких то контроллеров, которые имеют каждый несколько входов и выходов /судя по примеру нас интересует получение от них данных/. /все же твой пример аналогичен диалоговой форме. Имеется какое-то число short type; их типов. Наименование которой находится в char tag[32]; и конечно каждая из них имеет свой набор полей/ Если это не так, то приведи пожалуйста пример rsp_descr скажем у которого max значение уровня == 4. Конечно понимаю, что ты сейчас можешь скажем в node dj_ravenAnd here is the table, describing XML structure i have posted above: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Скорее так: ... ... {2, "name", DATATAG, FLDSTR, &name, NULL}, {2, "port", DATATAG, FLDSTR, &port, NULL}, ... ... Ведь name и port это скорее всего переменные в которые ты хочешь принять их значения. И все же еще один вопрос. Судя по приведенному примеру имеем n каких то контроллеров, которые имеют каждый несколько входов и выходов /судя по примеру нас интересует получение от них данных/. /все же твой пример аналогичен диалоговой форме. Имеется какое-то число short type; их типов. Наименование которой находится в char tag[32]; и конечно каждая из них имеет свой набор полей/ Если это не так, то приведи пожалуйста пример rsp_descr скажем у которого max значение уровня == 4. Конечно понимаю, что ты сейчас можешь скажем в node <name> и <port> добавить новые ветки ... Вообщем то идея понятна. Возьмем к примеру исходники редактора notepad++. Его автор сохраняет опции в одном или нескольких xml и при инициализации редактора имеем код на C++ в 4000 строк, который рутинно обрабатывает все nodes из разных xml и перекладывает их в структуры? Ты это дело хочешь решить путем имея description этих xml иметь алгоритм, который будет генерировать тот код, который будет выполнять те же действия, что и ручное кодирование /на примере notepad++/. Оно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 19:42 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
MasterZivdj_ravenИ просьба, если не знаете таких библиотек, то луче ничего не пишете, а не пытайтесь меня убедить, что их не может быть в принципе :) Если я её не найду, я её просто напишу сам я уверен, что библиотека ваша была доморощенная. в то, что ты ее напишешь, я лично не верю, потому что иначе уже бы написал - там реально делать нечего. но ты похоже на делфи программировал. Написал, если бы было время. За 7 часов, в лучшем случае, в месяц много не напишешь. А мне по этому проекту есть еще чем заняться. Сам ты на делфи писал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 20:50 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
ИзопропилСтранный какой-то XML - с пробелами в именах элементов da kakaja raznica, eto primer. Модератор: транслит на форуме под запретом. ... Наезды удаляем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 20:52 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Владимир2012 Ты это дело хочешь решить путем имея description этих xml иметь алгоритм, который будет генерировать тот код, который будет выполнять те же действия, что и ручное кодирование /на примере notepad++/. Оно? Хотелось бы услышать мнение об этой идее ... Правда эта идея разделяется на две ветки: 1) Генерировать C++ код на основании descriptions xml 2) Выполнять эти действия в run-time режиме Соответственно и подход к реализации library будет совершено разным. PS: Скорее всего возможна реализация и 1) и 2) подхода. Не исключаю, что желательно иметь две library ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 20:57 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Владимир2012Генерировать C++ код на основании descriptions xml Речь идет не об том descriptions, который привел автор topic. PS: Если эта тема интересна, то может быть новый topic создать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 21:06 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
dj_ravenИзопропилСтранный какой-то XML - с пробелами в именах элементов da kakaja raznica, eto primer. в примере необязательно делать грубые ошибки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 21:37 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
dj_raven, я за пять минут набросал в Visual Studio пример с использованием XmlInspector : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. XML Код: xml 1. 2. 3. 4. 5. 6. 7. 8. Вот и нахрена тут дополнительные структуры наподобие xml_struct? А то, что описано в "таблице" rsp_descr, намного проще выразить в виде if'ов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 23:03 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
dj_raven, ну что там, есть подвижки? Просто хочется разобраться, для чего же понадобился такой способ описания. Код: plaintext 1. 2. 3. 4. 5. 6. 7. Вот я опять смотрю на это и удивляюсь. Получается, что нужно вручную указать уровень вложенности каждого узла. Зачем? А если уровней будет десяток или больше? Ведь элементарно можно ошибиться. Также нужно указывать открывающие и прочие тэги. Зачем?! Особенно закрывающие - какая обработка предполагается для них? А если тэгов тысячи - все их описывать?!! Вообще, это наводит на сильные подозрения, что это автосгенерированный код. Какая-то утилита по образцовому xml выдаёт это дело, потом по нему происходит парсинг. Гм, всё равно сложно - лишние движения. А вот указание типов узлов: FLDSHRT, FLDSTR - наводит на мысли, что таким образом производится валидация входных данных. Но опять же - зачем такой способ? Если действительно нужна валидация, то следует использовать стандартные способы: делаем XmlSchema и берём валидирующий парсер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2015, 21:50 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
petalvikПросто хочется разобраться, для чего же понадобился такой способ описания. Идея у автора правильная /на его реализацию не обращайте внимания. Более важна сама идея./ Повторю то, что ранее уже было сказано. Возьмем к примеру исходники редактора notepad++. Его автор сохраняет опции в одном или нескольких xml и при инициализации редактора имеем код на C++ в 4000 строк, который рутинно обрабатывает все nodes из разных xml и перекладывает их в структуры. Так вот автор не хочет в ручную писать эти 4000 строк, в имея некий description входящих xml и имея некую функцию, которой передается description xml принять данные из xml и разложить полученные в некоторые переменные, структуры, массивы ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2015, 08:18 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Владимир2012Так вот автор не хочет в ручную писать эти 4000 строк, в имея некий description входящих xml и имея некую функцию, которой передается description xml принять данные из xml и разложить полученные в некоторые переменные, структуры, массивы ... обычная десериализация ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2015, 10:16 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Изопропилобычная десериализация Безусловно. Но изюминка идеи автора topic в том, что берем "чужой" xml/s/, подготавливаем description и подаем на вход некоторой функции, которая умеет принять данные и разложить в нужные места. PS: Как по мне идея неплохая и если ее воплотить в library /имеющей хорошо продуманный description .../, то можно было бы сэкономить не мало времени ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2015, 10:46 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Владимир2012 Так вот автор не хочет в ручную писать эти 4000 строк Э, не! Автор как раз вручную описывает все тысячи строк! Даже более того - он описывает каждый тэг: и открывающий, и закрывающий! С учётом уровня вложенности! Это ж опупеть можно, вручную это подсчитывать! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2015, 13:40 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
petalvikВладимир2012 Так вот автор не хочет в ручную писать эти 4000 строк Э, не! Автор как раз вручную описывает все тысячи строк! Даже более того - он описывает каждый тэг: и открывающий, и закрывающий! С учётом уровня вложенности! Это ж опупеть можно, вручную это подсчитывать!Задела меня эта тема, что то в ней есть. Конечно предложенный подход автора к реализации его идеи очень коряво смотрится. Но идея, то у него не плохая. Хотелось бы все же понять почему участников форума эта идея не заинтересовала? В основном все проекты которые используют xml файлы работают с ними в стиле notepad++. Сериализация/десериализация в xml классов годится для "своих" проектов, а как эффективно с наименьшей затратой времени работать с чужими xml? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2015, 21:15 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Владимир2012а как эффективно с наименьшей затратой времени работать с чужими xml? а в чём отличие от своего? если сильно непотребен - XSLT преобразование ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2015, 22:27 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Владимир2012 Хотелось бы все же понять почему участников форума эта идея не заинтересовала? Потому что это бред. XML нельзя отобразить в память программы в виде массива структур. Можно в виде дерева структур, это -- DOM Владимир2012 В основном все проекты которые используют xml файлы работают с ними в стиле notepad++. Это как ? Я не понял нифига. Владимир2012 Сериализация/десериализация в xml классов годится для "своих" проектов, а как эффективно с наименьшей затратой времени работать с чужими xml? Ну, DOM, SAX. SAX нужен для большого и простого XML, DOM -- для сложного и маленького. Та "идея", что была у ТС, на самом деле легко и просто за 30 минут реализуется на любом SAX-парсере. Я лично не понимаю, ни что тут сложное, ни что тут интересное. Единственный вопрос, который мне интересен в контексте XML+C++ -- это какую библиотеку использовать для С++ для разбора XML. Библиотек много, но все разные, и не все кроссплатформные, а мне бы хотелось иметь одно решение на все случаи жизни. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 08:13 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
MasterZivМожно в виде дерева структур, это -- DOM После parsing конечно имеем некое "дерево структур" - DOM, но в его в nodes данные обычно представлены в виде текста. Навряд ли это нас устроит. Поэтому мы обычно выбираем из nodes нужные нам данные и приводим их к native представлению их в программе. Т.е. перемещаем их в переменные, структуры, вектора, ... Возьмем к примеру stylers.xml /один из конфигурационных файлов notepad++/. <LexerStyles> <LexerType name="actionscript" desc="ActionScript" ext=""> <WordsStyle name="DEFAULT" styleID="11" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" /> <WordsStyle name="FUNCTION" styleID="20" fgColor="95004A" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" keywordClass="type2" /> <WordsStyle name="PREPROCESSOR" styleID="9" fgColor="804000" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" /> <WordsStyle name="INSTRUCTION WORD" styleID="5" fgColor="0000FF" bgColor="FFFFFF" fontName="" fontStyle="1" fontSize="" keywordClass="instre1" /> <WordsStyle name="TYPE WORD" styleID="16" fgColor="8000FF" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" keywordClass="type1" /> <WordsStyle name="NUMBER" styleID="4" fgColor="FF8000" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" /> <WordsStyle name="STRING" styleID="6" fgColor="808080" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" /> <WordsStyle name="CHARACTER" styleID="7" fgColor="808080" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" /> <WordsStyle name="OPERATOR" styleID="10" fgColor="000080" bgColor="FFFFFF" fontName="" fontStyle="1" fontSize="" /> <WordsStyle name="VERBATIM" styleID="13" fgColor="808080" bgColor="FFFFFF" fontName="" fontStyle="1" fontSize="" /> <WordsStyle name="REGEX" styleID="14" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="1" fontSize="" /> <WordsStyle name="COMMENT" styleID="1" fgColor="008000" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" /> <WordsStyle name="COMMENT LINE" styleID="2" fgColor="008000" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" /> <WordsStyle name="COMMENT DOC" styleID="3" fgColor="008080" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" /> <WordsStyle name="COMMENT LINE DOC" styleID="15" fgColor="008080" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" /> <WordsStyle name="COMMENT DOC KEYWORD" styleID="17" fgColor="008080" bgColor="FFFFFF" fontName="" fontStyle="1" fontSize="" /> <WordsStyle name="COMMENT DOC KEYWORD ERROR" styleID="18" fgColor="008080" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" /> </LexerType> ... ... Как поступает автор для принятия этих данных из xml /понятно он не в "лоб" парсит его, а использует готовый парсер - SimpleXML/. Стантартно. И так наша задача принять данные из stylers.xml и представить их в native представлении программы. В notepad++ native представление данных из stylers.xml представленно в: struct StyleArray struct LexerStyler : public StyleArray struct LexerStylerArray Далее автор пишет функцию /в notepad++ это bool NppParameters::feedStylerArray(TiXmlNode *node)/, которая из DOM вытаскивает данные и помещает в один или несколько векторов. Вроде все логично, правильно и не сложно. Но такой подход принятия данных предопределяет разработку множества функций для принятия из xml логически, связанных данных. В notepad++ такой подход предопределяет написания порядка 4000 строк кода /см. Parameters.cpp и Parameters.h/, а это уже довольно трудоемко. Как же можно решить подобную задачу проще? 1-й подход - кодогенерация В программе определяем некоторые meta данные об переменных, структурах, векторах ... в которые нужно принять данные. Далее подаем на вход кодогенератору эти метаданные и он на основе этих данных выдает нам готовый C++ код, который мы просто затем copy/paste в свою программу /например в GetDataFromXML.cpp/. 2-й подход - run time принятие данных. Этот подход мне больше нравится, но его реализация будет скорее всего намного сложнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 10:38 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
MasterZivБиблиотек много, но все разные, и не все кроссплатформные, а мне бы хотелось иметь одно решение на все случаи жизни. Меня пока вполне устраивает http://sourceforge.net/projects/tinyxml/files/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 10:56 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
А не будет его, решения на все случаи жизни. Потому что разные библиотеки заточены под разные юзкейсы; что удобно использовать на одной платформе — неприемлемо на другой, где-то требуется скорость, где-то соблюдение всех стандартов, где-то трансформации, и так далее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 11:15 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Давайте я озвучу навскидку задачку. (Задаче не всеобъемлющая и не охватывает весь спектр XML анализа но ее достаточно чтобы оценить первые недостатки предлагаемой технологии (к примеру хардкод, бойлерплейт, негибкость)) Есть документ (угадайте откуда): Код: xml Необходимо 1) Сформировать plain-text вида. Код: plaintext 2) Сформировать копию исходного документа но с фильтрацией всех сообщений от зобаненных. 3) Сформировать CSV документ для импорта данных форума в другую БД. К примеру. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 12:25 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Владимир2012 Как же можно решить подобную задачу проще? 1-й подход - кодогенерация В программе определяем некоторые meta данные об переменных, структурах, векторах ... в которые нужно принять данные. Далее подаем на вход кодогенератору эти метаданные и он на основе этих данных выдает нам готовый C++ код, который мы просто затем copy/paste в свою программу /например в GetDataFromXML.cpp/. Именно кодогенерация. По схеме данных (WSDL) генерируется структура на С(++) и сериализаторы и десериализаторы для них. См. например gSOAP. Владимир2012 2-й подход - run time принятие данных. Это как ? Хотя, мне лично эта тема неинтересна от слова "совсем", поэтому... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 13:11 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Владимир2012MasterZivБиблиотек много, но все разные, и не все кроссплатформные, а мне бы хотелось иметь одно решение на все случаи жизни. Меня пока вполне устраивает http://sourceforge.net/projects/tinyxml/files/ TinyXML традиционно не поддерживал никогда namespaces, уже стал ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 13:12 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
RWolfА не будет его, решения на все случаи жизни. Потому что разные библиотеки заточены под разные юзкейсы; что удобно использовать на одной платформе — неприемлемо на другой, где-то требуется скорость, где-то соблюдение всех стандартов, где-то трансформации, и так далее. Это почему это не будет ? В Java есть такие библиотеки, универсальные, переносимые, быстрые, с какого лешего им не быть под C++ ? В BOOST много библиотек есть, почему бы туда не запихать ещё и XML ? (кстати, надо поглядеть, что там на этот счёт). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 13:14 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
mayton, Это НЕ XML! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 13:15 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
MasterZivTinyXML традиционно не поддерживал никогда namespaces, уже стал ? Выдержка из TinyXML-2 http://www.grinninglizard.com/tinyxml2/ "... 4. More modern C++, including a proper namespace." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 13:23 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Владимир2012MasterZivTinyXML традиционно не поддерживал никогда namespaces, уже стал ? Выдержка из TinyXML-2 http://www.grinninglizard.com/tinyxml2/ "... 4. More modern C++, including a proper namespace." Неймспейсы в XML, а не в C++! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 13:25 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Владимир2012MasterZivTinyXML традиционно не поддерживал никогда namespaces, уже стал ? Выдержка из TinyXML-2 http://www.grinninglizard.com/tinyxml2/ "... 4. More modern C++, including a proper namespace." Потом, это -- другая библиотека, TinyXML2. Ну и заявы автора как-то пугают... (No STL requirement, например... Зачем ? И что вместо std::string ?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 13:28 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Потому, что разные задачи предъявляют к парсеру противоречивые требования. Допустим, библиотека, разворачивающая документ целиком в DOM, не сможет парсить большие XML из-за исчерпания памяти, SAX-парсер не сможет модифицировать документ, а на эмбеддед-платформах просто недостаточно ресурсов для универсальных парсеров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 13:30 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
maytonДавайте я озвучу навскидку задачку. На JavaScript эта задача не сложно решается. В topic Создании wrappers /interfaces/ над некоторыми libraries из MSDN не ручным кодированием http://www.sql.ru/forum/1140490/sozdanii-wrappers-interfaces-nad-nekotorymi-libraries-iz-msdn-ne-ruchnym-kodirovaniem Использовал связку JavaScript+PHP для получения *.cpp, *.h и *.idl. C++ не использовал потому, что сама постановка задачи не требовала высоких требований к скорости ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 13:34 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
RWolfMasterZiv, Потому, что разные задачи предъявляют к парсеру противоречивые требования. Допустим, библиотека, разворачивающая документ целиком в DOM, не сможет парсить большие XML из-за исчерпания памяти, SAX-парсер не сможет модифицировать документ, а на эмбеддед-платформах просто недостаточно ресурсов для универсальных парсеров. Каждый парсер обязан поддерживать и DOM, и SAX. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 13:35 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Ну, я вот expat использую — не поддерживает DOM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 13:38 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
MasterZivПотом, это -- другая библиотека, TinyXML2 Sorry. TinyXML2 использую. MasterZivНу и заявы автора как-то пугают... (No STL requirement, например... Зачем ? И что вместо std::string ?) Автор TinyXML2 считает это даже преимуществом. Меня это особенно не волнует. В конце концов ведь я получил от TinyXML2 нужный мне функционал ... Будет чего не доставать допишу или скорее присмотрюсь к другому проекту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 13:41 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
RWolfMasterZiv, Ну, я вот expat использую — не поддерживает DOM. Я имел в виду, что я формулирую требования к будущей абстрактной библиотеке, которую я хочу найти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 13:46 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
MasterZivmayton, Это НЕ XML! Хм... верно. Дайте подумать. Найду другие данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 14:29 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
MasterZivЭто НЕ XML! Оно то так, только mayton то намекал на страницу из сайта http://www.sql.ru/ . А она с чего начинается? С Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 16:14 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
maytonMasterZivmayton, Это НЕ XML! Хм... верно. Дайте подумать. Найду другие данные. Кажется, достаточно там убрать <BR> -ы, и всё будет ок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 16:30 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
MasterZivЭто НЕ XML! Да ты прав. Валидацию в качестве xml страница с http://www.sql.ru/ не проходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 16:31 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Владимир2012MasterZivЭто НЕ XML! Оно то так, только mayton то намекал на страницу из сайта http://www.sql.ru/ . А она с чего начинается? С Код: plaintext 1. 2. 3. А это не важно, с чего начинается. Главное, что оно не XML, а броузеру-то вообще по барабану, как теги закрывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 16:33 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
MasterZivВладимир2012пропущено... Оно то так, только mayton то намекал на страницу из сайта http://www.sql.ru/ . А она с чего начинается? С Код: plaintext 1. 2. 3. А это не важно, с чего начинается. Главное, что оно не XML, а броузеру-то вообще по барабану, как теги закрывать. Хотя, может я и неправ. Надо валидировать по DTD, как это сделать быстро и легко -- я не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 16:35 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
MasterZiv Кажется, достаточно там убрать <BR> -ы, и всё будет ок. Нужно убрать: <br/>, <br /> и все блоки комментариев ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 16:39 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Вообще то вопрос интересный. Интересно услышать правильный ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 16:42 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Владимир2012Интересно услышать правильный ответ. Получил валидный xml из страницы сайта http://www.sql.ru/, после следующих замен /в целом по всей странице/: - "&" на "&" - "alt="">" на "alt=""/>" Связано с тем, что "<img ... " не имеет валидного ">" - " < " на "<" Если user привел в комментах блок текста на C++ PS: Вообщем то если бы страница сайта удовлетворяла стандарту представления страниц типа xhtml, то проблем бы вообще ни каких не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 17:49 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 18:17 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Да. Всё верно. Данный документ не является XML-валидным. Хедер появляется благодаря забавному стечению обстоятельств или причудой веб-мастеринга (кстати не первой) последние лет 10. Тот факт что не соблюдаются парность тегов или условия вложенности похоже верстальщиков не беспокоит. Эдакая себе мимикрия. Браузер хавает. Для конверсии таких псевдо-XML ей я использовал HTMLCleaner http://htmlcleaner.sourceforge.net/ когда-то давно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 22:19 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
HTML, вообще-то и не разрабатывался как well-formed SGML - в нём масса послаблений, а задачей пользовательского агента является отображение контента, а не его валидация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2015, 17:33 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Да но "шапка" у него вполне себе "боярская". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2015, 17:41 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Мало ли что написано на заборе? В паре text/html определяющим является первое слово, а все уточнения после косой черты можно интерпретировать как plain. Имеем полное право, хотя такую реализацию сложно назвать адекватной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2015, 17:47 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Вот более tru-шный xml. Созданный GPS-навигатором в окрестностях "лысой" горы. Давайте возьмём его за основу как некое ТЗ и получим хотя-бы последовательность точек широты и долготы. 50.4329464585,30.4889225028 е.t.c. Разумеется с использованием табличного С++XML-парсера, и посмотрим на решение с высоты тык-скыть возможных недостатков о которых мы так бурно говорили. Автор не прячся. Подключайся к процессу. Код: 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. 25. 26. 27. 28. 29. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2015, 00:02 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
mayton, документ не валидный, тэги не закрыты Чтобы не было разногласий, наверно нужно сразу договориться, что далее идут три закрывающих тэга: Код: xml 1. 2. 3. Оно, конечно, понятно, но копья ломаются и не по таким поводам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2015, 00:33 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
petalvik, я не аттачил весь документ. Он слишком велик для форума. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2015, 00:35 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
petalvik, кстати это прекрасный повод обсудить поведение поточного (streamable) XML-парсера. Как ты думаешь. А? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2015, 00:37 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
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>" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2015, 08:59 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Владимир2012 Сразу говорю это всего лишь первый эскиз ... Скорее всего должен быть некий tools, который проанализировав xml создаст meta данные Зачем тулз? Я говорю об обыкновенном usecase анализатора о котором писал топик-стартер. Разве он что-то говорил о тулзе? Давайте хором сядем и напишем этот юзкейс и осмотрим и обгрызём со всех сторон его чтоб понять все недостатки предлагаемой методики. Я нарочно взял простой документ где нет контекста и отношения parent-child между тегами не меняют семантики. Он плоский. По сути это CSV. Нам даже не важна вложенность. Можем обрабатывать только события открытия тега trkpt и его атрибутов. И игнорировать всё остальное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2015, 12:20 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
0637maytonЗачем тулз? Вообщем то согласен. Для начала можно потренироваться на "ручных" meta данных, а затем уже навесить всяких "рюшечек" /например tools .../. Как тебе видится формат представления meta данных /авторский мне что-то не сильно нравится/? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2015, 12:43 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Моё видение будет полным когда я увижу usecase. К сожалению у меня есть опасение что я что-то не увидел красивое и прекрасное в идеях автора и поэтому хочу постоять в сторонке и посмотреть как мемберы это реализуют а потом уж высказать свою ИМХУ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2015, 13:21 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
maytonДавайте хором сядем и напишем этот юзкейс и осмотрим и обгрызём со всех сторон его чтоб понять все недостатки предлагаемой методики. Я нарочно взял простой документ где нет контекста и отношения parent-child между тегами не меняют семантики. Он плоский. По сути это CSV. Нам даже не важна вложенность. Можем обрабатывать только события открытия тега trkpt и его атрибутов. И игнорировать всё остальное. У меня сразу были мысли в этом же направлении. Плоский документ обрабатывать легко хоть с помощью StAX-парсера (пример с которым я привёл), хоть задавая способ его обработки "таблицей" (способ автора). Но даже с простым изначальным xml мне пришлось вызывать Inspect отдельно в каждой ветке if, для продвижения к содержимому узла. При этом не сделана проверка на возможные ошибки. Добавить их - код разрастётся. А вот если будут сложные отношения между узлами, да хотя бы узлы с одинаковыми именами на разных уровнях вложенности - тут становится интересней. Например, вот в этой теме пытаются задать схему для сложных связей. Чтобы проверять подобные связи при парсинге - нужен уже не простой однопроходный парсер. Ну или придётся сохранять значения и реагировать далее по ходу разбора. Впрочем, валидация - это, наверное, отдельная тема. Способ автора. Тут тоже много проблем. Если версия документа меняется - добавляются/удаляются узлы, изменяется их вложенность, то нужно будет вручную в "таблице" изменять параметры - легко запутаться. А ошибка выявится лишь в рантайме. Имхо, неудобный это способ. Опять же, неясно, как задавать неймспейсы, буде они в xml. И да, хотелось бы увидеть юзкейс. Я всё-таки думаю, что эта "таблица" - выхлоп кодогенератора. Вот тут 17774948 Владимир2012 писал:Владимир2012 2-й подход - run time принятие данных. Этот подход мне больше нравится, но его реализация будет скорее всего намного сложнее. Это сложно в нативных языках. А, например, в .NET XmlSerializer так и работает: в рантайме, пользуясь метаданными, создаёт парсер на лету (однако, можно и предварительно создать нужную сборку, для повышения производительности), и десериализует данные из xml в набор классов (который можно предварительно автоматически сгенерировать). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2015, 16:35 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
Кодогенератор это что? Взять xml-схему из шапки - и накидать over 9000 функций которые на самом деле не нужны и представляют собой некую "возможность" ? Для моей задачи которую я озвучил. То бишь получить список географических координат какая польза в кодо-генераторе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2015, 17:26 |
|
||
|
Xml parser библиотека для C/C++
|
|||
|---|---|---|---|
|
#18+
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. ---------- Логический блок ------------------- Код: 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. В приведенный пример meta данных надо правда добавить данные об native данных в которые нужно поместить данные из xml. Задача вполне решаема, но скорее всего потрудиться для ее реализации придется не мало. В чем выгода? Программист не будет "вручную" выписывать 4000 строк ... Скажу ранее был позитивный опыт разработки генератора отчетов, который на основании meta данных генерировал исходный текст программы, которая позволяла сформировать отчет. Честно скажу - не жалею о проделанной работе /сэкономил в разы больше времени, чем потратил на разработку/. PS: "Искусство требует жертв". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2015, 18:25 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2018949]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
60ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
88ms |
get tp. blocked users: |
1ms |
| others: | 10ms |
| total: | 194ms |

| 0 / 0 |
