Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Моля, предложете семпъл C парсер за XML :)
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=13775
Страница 1 от 2

Автор:  NikB [ Чет Май 14, 2015 4:41 pm ]
Заглавие:  Моля, предложете семпъл C парсер за XML :)

Моля, предложете семпъл C парсер за XML :)

Опитах се да търся, но повечето са C++.
Бих могъл да си избера от двата за C, които намерих, но ще е много полезно, ако споделите опит в ползвантео.

expat
libroxml

Автор:  gicho [ Пет Май 15, 2015 12:49 am ]
Заглавие:  Re: Моля, предложете семпъл C парсер за XML :)

ezxml:
http://ezxml.sourceforge.net/
Но е прост, не знам какво ще правиш. Аз съм го ползвал само за четене и дори не знам дали може да пише. Не поддържа валидиране.
Edit: аз съм го ползвал на микроконтролер, не иска почти нищо освен стандартните библиотеки (не му трябва ОС или файлова система имам предвид).

Автор:  NikB [ Пет Май 15, 2015 9:46 am ]
Заглавие:  Re: Моля, предложете семпъл C парсер за XML :)

Благодаря ти много!
Прилича на каквото ми трябва, но търси
#include <unistd.h>
и
#include <sys/mman.h>
които ги няма в пакета.

Автор:  gicho [ Пет Май 15, 2015 10:25 am ]
Заглавие:  Re: Моля, предложете семпъл C парсер за XML :)

При мен най-отгоре в ezxml.c гордо стои:
Код:
#define EZXML_NOMMAP

а unistd си имам от toolchain-a (gcc arm).
Ти на какво се опитваш да го ползваш?

Автор:  NikB [ Пет Май 15, 2015 10:33 am ]
Заглавие:  Re: Моля, предложете семпъл C парсер за XML :)

STM, ама за сега го симулирам с Visual studio под Win.
(май накрая техниката ще е на UC3C2128)
Както и да е, това файлче го има в мрежата, просто да знам, че е то.

(СЕГА ще го изровя от CooCox-а)

Автор:  gicho [ Пет Май 15, 2015 10:42 am ]
Заглавие:  Re: Моля, предложете семпъл C парсер за XML :)

Просто компилирай с GCC, за PC-то ползвай MingW. Това че е стм или атмел не ми говори кой компилатор ще ползваш накрая, предполагам gcc, но може да е iar, keil, ... ?

Автор:  NikB [ Пет Май 15, 2015 11:28 am ]
Заглавие:  Re: Моля, предложете семпъл C парсер за XML :)

gicho написа:
Просто компилирай с GCC, за PC-то ползвай MingW. Това че е стм или атмел не ми говори кой компилатор ще ползваш накрая, предполагам gcc, но може да е iar, keil, ... ?

а, да, за двете ползвам gcc.
ОК, мерси!

Автор:  NikB [ Пон Май 18, 2015 11:54 am ]
Заглавие:  Re: Моля, предложете семпъл C парсер за XML :)

За сега си избрах това: Mini-XML Tiny XML Library.
Май за ползване е малко по-сложно от препоръчаното, но е по-лесно за интегриране. Поне за инцидентно пишеш C, като мен.

Автор:  NikB [ Вто Окт 20, 2015 3:53 pm ]
Заглавие:  Re: Моля, предложете семпъл C парсер за XML :)

Днес ми потрябва и реших да ползвам (за Атмел проект) ezxml.
Виждам (в map файла, а и в ReadMe така пише), че заема под 20КБ в програмата.
А къде мога да прочета някаква оценка за заемания RAM?
Ясно, че ще зависи от елементите на XML, но все пак трябва да има някаква оценка.

Автор:  gicho [ Вто Окт 20, 2015 4:16 pm ]
Заглавие:  Re: Моля, предложете семпъл C парсер за XML :)

По спомен си хапваше динамична памет, така че колко е отпрал от heap-а зависи с какво го тормозиш.

Автор:  DanielDimov [ Вто Окт 20, 2015 6:16 pm ]
Заглавие:  Re: Моля, предложете семпъл C парсер за XML :)

ако трябва аз да пиша такъв парсер - бих го направил да ползва само един линеен буфер с фиксирана дължина която да се дефинира като константа... не ми се струва нормално да не се знае колко памет ползва която и да е библиотека за микроконтролер при положение че паметта му е най-ценния ресурс!

Автор:  miro_atc [ Вто Окт 20, 2015 8:19 pm ]
Заглавие:  Re: Моля, предложете семпъл C парсер за XML :)

DanielDimov написа:
ако трябва аз да пиша такъв парсер


е тогава ще стане весело :-)

Не съм го разглеждал тоя ezxml, но в линка му пише, че няма валидатор. По принцип не е добре да се работи без валидация. Ако все пак няма нужда от валидация, то по-добре е да се избегне и парсването. С няколко прости функции може да се обхожда/сканира директно, така както си е в xml/text. За това не е нужна памет изобщо.
Ако има валидиране, то xsd или съответната там схема определят какво е валидно и какво не. Парсерът се предполага, че трябва да може да обработи всяка валидна комбинация, демек ограничението би трябвало да се задава чрез схемата на валидация. Това значи да няма полета с произволна дължина и т.н. Другият вариант, който между другото е по-удачен, е да се ползва нерекурсивен парсер. Така дори и да свърши динамичната памет, няма да се омаже стека и да забие, а ще си върне грешка.
Другото важно нещо е в точно каква форма ще се парсва. Използването на С-структури в динамичната памет е противопоказно. Бъговете са неизбежни, а който се надява на обратното е голям оптимист. Единственото решение са С++ класове от сорта на map/tree с автоматично управление на заемата памет. Освен, че така се решава проблема с освобождаването на паметта, също така се пести много памет при последващи обработки. С++ класовете/шаблони също така са далеч по-оптимизирани на тема индексиране, обхождане и т.н.
С една дума чистото Ц на тема парсери и динамични структури е равносилно на самоубийство.... Не си го и помисляйте даже ;-)

Автор:  NikB [ Сря Окт 21, 2015 9:22 am ]
Заглавие:  Re: Моля, предложете семпъл C парсер за XML :)

Благодаря ви много за коментарите, съветите, препоръките, ... ! Разширихте ми кръгозора :), описахте рисковете и дадохте насоки :).

Идеята е тоя парсер да се стартира еднократно, за настройка на параметри, затова не съм много уплашен от ситуацията с паметта (за сега).
А за валидацията си мислех, че XML ще е външно валидиран (т.е. парсваните XML-ли ще са проверени през същия парсер в дебъг обстановка).

Автор:  palavrov [ Сря Окт 21, 2015 12:00 pm ]
Заглавие:  Re: Моля, предложете семпъл C парсер за XML :)

Освен XML може да се ползва и JSON - малко по простичък е за парсване а функционално е същия.
А щом е само за инициализация може и най прост INI файл да се ползва - парсването му е още по просто + готови библиотеки колкото искаш ...

Автор:  DanielDimov [ Сря Окт 21, 2015 12:25 pm ]
Заглавие:  Re: Моля, предложете семпъл C парсер за XML :)

NikB написа:
Идеята е тоя парсер да се стартира еднократно, за настройка на параметри, затова не съм много уплашен от ситуацията с паметта (за сега).


В такъв случай (не си принуден от някой друг да ползваш XML) ти препоръчвам да ползваш ето това: http://www.digip.org/jansson/

Страница 1 от 2 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/