Облегченный парсер XML SAX C++
Я знаю, по крайней мере, три легких синтаксических анализатора C++ XML: RapidXML, TinyXML и PugiXML. Однако все три используют интерфейс на основе DOM (т. е. они создают собственное представление XML-документа в памяти, а затем предоставляют интерфейс для его перемещения и управления). Для большинства ситуаций, с которыми мне приходится иметь дело, я предпочитаю интерфейс SAX (где парсер просто выплевывает поток событий, таких как start-of-tag и код приложения несет ответственность за все, что он хочет, основываясь на этих событиях).
может ли кто-нибудь порекомендовать облегченную библиотеку C++ XML с интерфейсом SAX?
Edit: я также должен отметить библиотеку Microsoft XmlLite, которая тут используйте интерфейс SAX (ну, на самом деле" тянуть " интерфейс, который, возможно, даже лучше). К сожалению, это исключено для меня на данный момент, поскольку, насколько я знаю, это закрытый источник и только окна (пожалуйста, поправьте меня, если я ошибаюсь этот.)
3 ответов
Я использовал экспат когда мне нужно было разобрать XML. Это очень легкий вес (ну, раньше он был; прошло некоторое время с тех пор, как я делал XML-материал) и выполняет эту работу.
вы можете попробовать http://die-xml.googlecode.com/ . он кажется очень маленьким и простым в использовании
Это недавно сделанный C++0x XML SAX parser с открытым исходным кодом, и автор готов к обратным связям
он анализирует входной поток и генерирует события при обратных вызовах, совместимых с std::function
машина стека использует конечные автоматы в качестве бэкэнда, а некоторые события (начальный тег и текстовые узлы) используют итераторы для минимизации буферизации, что делает его довольно легкий
pugixml и RapidXML не имеют интерфейсов, соответствующих DOM.. эти API пришли с серьезными ограничениями на функциональные возможности и соответствие. Возможно, вы захотите исследовать VTD-XML, который значительно более продвинутый, чем DOM или SAX/Pull