LINUX.ORG.RU

Посоветуйте XML parser

 


1

4

Посоветуйте легкую либу для парсинга XML. Требования:

  • 1. ООП интерфейс (либа на плюсах)
  • 2. Переносимость (Windows, BSD, Mac, Linux)
  • 3. Желательно чтобы была достаточно популярна (в идеале в большинстве дистров)
  • 4. Как можно меньше зависимостей, т.к. будет использоваться в очень легкой негуевой проге.


Последнее исправление: flareguner (всего исправлений: 1)

Использую TinyXml (Linux, OS X, Windows, iOS, Android). Но некоторые рекомендуют RapidXml, как более шуструю. У мня руки так и не дошли провести тесты на скорость.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Почитал доку по RapidXml - весьма занятная штука. Судя по тестам автора, TinyXml сливает в 30-60 раз. Если я правильно понял, то скорость достигаестя за счет отсутсвия аллокаций для строк (имя ноды и значение) и за счет шаблонов.

andreyu ★★★★★
()

Есть еще pugixml - http://pugixml.org/

pugixml is a light-weight C++ XML processing library. It features:

DOM-like interface with rich traversal/modification capabilities

Extremely fast non-validating XML parser which constructs the DOM tree from an XML file/buffer

XPath 1.0 implementation for complex data-driven tree queries

Full Unicode support with Unicode interface variants and automatic encoding conversions

Позиционируется как мегабыстрый парсер, в том числе за счет того, что он не валидирующий парсер, если подсунете ему Xml с ошибками - он упадет. При сборке программы просто добавляете pugixml.cpp в проект и собираете, т.е. никаких лишних зависимостей для бинарника.

hippi90 ★★★★★
()
Ответ на: комментарий от hippi90

Позиционируется как мегабыстрый парсер

Не только позиционируется, но и является.

если подсунете ему Xml с ошибками - он упадет

Не упадет, а выдаст ошибку

При сборке программы просто добавляете pugixml.cpp в проект и собираете, т.е. никаких лишних зависимостей для бинарника.

Есть header-only режим.

annulen ★★★★★
()
Ответ на: комментарий от PatrickKilpatrick

rapidxml

плюсую, у нее вообще нет зависимостей и сделана она в виде простого хедера

wota ★★
()

если размер не критичен - QtXML, ну сам понимаешь, что потянет много зависимостей, но зато и много плюшек в придачу

EugeneBas ★★
()

Насколько я понял, и pugixml, и rapidxml - не-валидируюшие. А валидирующие парсеры на Си++ есть? Не привязанные к толстым фреймворкам.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

А валидирующие парсеры на Си++ есть?

libxml2 (не на С++, но есть обертка), Xerces-C.

annulen ★★★★★
()
Ответ на: комментарий от annulen

Сливает по сравнению с pugixml и по скорости, и по потреблению памяти, правда совсем немного. А вот по качеству документации и поддержке - очень существенно.

В документации на RapidXml написано, что pugixml и pugxml тормознее, хотя и не так сильно, как tinyxml.

andreyu ★★★★★
()
Ответ на: комментарий от annulen

Рекомендующих фтопку, тормоз еше тот. Хотя популярен среди виндузятников.

Это не так, его и на консолях используют. Хотя чаще там подготовленный бинарный формат.

andreyu ★★★★★
()
Ответ на: комментарий от annulen

Она устарела, так как в отличие от pugixml,

В плане бенчмарка возможно. А возможно, что всяк кулик свое болото хвалит. Потому по версии rapidxml самый быстрый rapidxml, а по версии pugixml самый быстрый pugixml. Опять же «не важно как голосуют, важно как считают» :)

rapidxml давно не развивается.

А чему там развиваться? Цель достигнута, ошибок нет, функционала хватает.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Потому по версии rapidxml самый быстрый rapidxml, а по версии pugixml самый быстрый pugixml.

Только rapidxml сравнивает себя с pugixml 0.3, а с тех пор он существенно ускорился (актуальный релиз 1.2)

annulen ★★★★★
()
Ответ на: комментарий от annulen

Только rapidxml сравнивает себя с pugixml 0.3, а с тех пор он существенно ускорился (актуальный релиз 1.2)

Да я не спорю, может pugixml и лучше. Сейчас пробую прикрутить его рядом с tinyxml.

andreyu ★★★★★
()

Для каких целей xml? Прчему собсна не json?

invy ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.