Фрагмент для SAX анализа пользовательского объекта в C ++? - PullRequest
1 голос
/ 24 января 2009

Может ли кто-нибудь поделиться фрагментом кода, где он анализировал определенный пользователем объект с использованием SAX-анализатора в C ++.

1 Ответ

4 голосов
/ 24 января 2009

SAX означает Простой API для XML .

SAX предназначен только для анализа XML-файлов. Поэтому, если вы хотите проанализировать объект из C ++ с использованием SAX, единственный способ, которым это имеет смысл, - сначала сериализовать этот объект в XML.

Причина, по которой вы захотите использовать синтаксический анализатор SAX XML, заключается в том, что у вас может быть очень большой файл XML, и вы хотите читать его только по частям, выполняя это, вы используете меньше оперативной памяти.

Хороший пример того, почему вы хотите использовать SAX-парсер, это если у вас есть последовательный std :: vector строк в XML-файл. Допустим, этот вектор содержит миллионы записей. Тогда вы не сможете сразу прочитать весь XML-файл в память. Вместо этого вам придется использовать SAX-парсер.

Существует много различных реализаций парсера SAX, но вы даже можете довольно легко создать его, нарисовав конечный автомат . Когда вы входите в состояние чтения полного элемента, вы вызываете функцию обратного вызова.

Вы также можете использовать LibXML, MSXML, Xerces-C ++ XML Parser и многие другие библиотеки для анализа SAX.

Возвращаясь к исходному вопросу. Ваш SAX-анализатор просто проанализирует XML-представление вашего объекта, а затем заполнит члены объекта. Или, если ваш объект является контейнером, добавьте элементы контейнера.

...