Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
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?fid=57&msg=38986763&tid=2018949]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
65ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 296ms |
| total: | 439ms |

| 0 / 0 |
