Я пишу приложение парсера 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 ++. Кто-нибудь знает хороший учебник по этому вопросу?
Спасибо за вашу помощь!
ctx
Аргумент обратных вызовов SAX будет содержать указатель, который передается как user_data
для функций инициализации, таких как xmlCreatePushParserCtxt
или же xmlCreateIOParserCtxt
:
xmlParserCtxtPtr xmlCreatePushParserCtxt (xmlSAXHandlerPtr sax,
void * user_data,
const char * chunk,
int size,
const char * filename)
Он может использоваться для передачи указателя на произвольную пользовательскую структуру. Эта структура обычно содержит переменную состояния, которая может использоваться для определения текущей позиции в дереве документа.
Хороший учебник может быть нашел здесь. Он использует устаревший интерфейс SAX1, но интерфейс SAX2 аналогичен.