Облегченный синтаксический анализатор C ++ SAX XML - PullRequest
9 голосов
/ 13 января 2011

Мне известны как минимум три легких синтаксических анализатора C ++ XML: RapidXML , TinyXML и PugiXML .Однако все три используют интерфейс на основе DOM (т. Е. Они создают свое собственное представление XML-документа в памяти, а затем предоставляют интерфейс для его обхода и управления).В большинстве ситуаций, с которыми мне приходится сталкиваться, я предпочитаю интерфейс SAX (где анализатор просто выплевывает поток событий, таких как start-of-tag, а код приложения отвечает за выполнение всего, что он хочет, основываясь на этих событиях)..

Кто-нибудь может порекомендовать облегченную библиотеку C ++ XML с интерфейсом SAX?

Редактировать: Следует также отметить библиотеку Microsoft XmlLite, которая использует использует интерфейс SAX(ну, на самом деле интерфейс "тянуть", который, возможно, даже лучше).К сожалению, на данный момент это исключено для меня, поскольку, насколько я знаю, это закрытый исходный код и только Windows (пожалуйста, исправьте меня, если я ошибаюсь в этом).

Ответы [ 3 ]

6 голосов
/ 23 ноября 2011

вы можете попробовать http://die -xml.googlecode.com / . кажется, что он очень маленький и простой в использовании

это недавно сделанный C ++ 0x XML SAX-парсер с открытым исходным кодом, и автор желает получить отзывы

он анализирует входной поток и генерирует события для обратных вызовов, совместимых с std :: function

стековая машина использует конечные автоматы в качестве бэкэнда, а некоторые события (начальный тег и текстовые узлы) используют итераторы, чтобы минимизировать буферизацию, делая ее довольно легкой

5 голосов
/ 13 января 2011

Я использовал expat , когда мне нужно было проанализировать XML. Он очень легкий (ну, раньше; раньше я занимался XML) и выполняет свою работу.

0 голосов
/ 14 января 2011

PugiXML и RapidXML не имеют интерфейсов, соответствующих DOM. Эти API имеют серьезные ограничения по функциональности и соответствию.Возможно, вы захотите изучить VTD-XML, который является значительно более продвинутым, чем DOM или SAX / Pull

...