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

Я пишу приложение парсера xml на C ++, используя библиотеку libxml2. я использую startElementNsSAX2Func разобрать элементы и charactersSAXFunc проанализировать значения элемента.

Подписи:

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 ++. Кто-нибудь знает хороший учебник по этому вопросу?

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

0

Решение

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

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

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

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

0

Другие решения


По вопросам рекламы [email protected]