Как использовать контексты в синтаксическом анализе SAX XML в C ++ (с использованием libxml2)?

0

Я пишу приложение XML-анализатора в C++, используя библиотеку libxml2. Я использую startElementNsSAX2Func для синтаксического анализа элементов и символовSAXFunc для анализа значений элементов.

Подписи:

void    startElementNsSAX2Func  (void * ctx, const xmlChar * localname, const xmlChar * prefix, const xmlChar * URI, int nb_namespaces, const xmlChar ** namespaces, int nb_attributes, int nb_defaulted, const xmlChar ** attributes)
void    charactersSAXFunc(void * ctx, const xmlChar * ch, int len)

Я хочу использовать переменную ctx, чтобы я мог анализировать XML-документ на основе порядка элементов, и я не уверен, как это сделать. Любое понимание этого было бы действительно полезно.

Также я не смог найти хорошую статью о синтаксическом анализе XML SAX в C/C++. Кто-нибудь знает хороший учебник по этому поводу?

Спасибо за вашу помощь!

Теги:
xml-parsing
saxparser
libxml2

1 ответ

0
Лучший ответ

Аргумент ctx для обратных вызовов SAX будет содержать указатель, который передается как user_data для функций инициализации, таких как xmlCreatePushParserCtxt или xmlCreateIOParserCtxt:

xmlParserCtxtPtr xmlCreatePushParserCtxt (xmlSAXHandlerPtr sax, 
                                          void * user_data, 
                                          const char * chunk, 
                                          int size, 
                                          const char * filename)

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

Здесь можно найти хороший учебник. Он использует устаревший интерфейс SAX1, но интерфейс SAX2 аналогичен.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню