SAX2 (Xerces-C): Как получить номер строки проанализированных тегов? - PullRequest
0 голосов
/ 24 сентября 2011

Я анализирую XML-файл в C ++, используя API-интерфейс SAX2 Xerces-C. Поэтому я реализую интерфейс DefaultHandler и его функции

void startElement(
    const   XMLCh* const    uri,
    const   XMLCh* const    localname,
    const   XMLCh* const    qname,
    const   xercesc::Attributes&     attrs
);

и

void endElement(
    const   XMLCh* const    uri,
    const   XMLCh* const    localname,
    const   XMLCh* const    qname
);

Когда в xml-файле есть синтаксическая ошибка, выброшенное SAXParseException дает мне номер строки, где произошла ошибка, и я могу напечатать строку ошибки для пользователя.

В моем приложении возможно, что синтаксис правильно сформирован, но содержащиеся данные не имеют особого смысла. В этом случае я также хотел бы напечатать строку ошибки для пользователя. Но я не нашел способа получить текущий номер строки, потому что xml синтаксически правильный и не генерируется SAXParseException. Есть ли способ получить номер строки тега?

1 Ответ

3 голосов
/ 12 октября 2011

Переопределите метод setDocumentLocator() в вашем классе, полученный из xercesc::DefaultHandler, чтобы получить объект xercesc::Locator. Затем вы можете вызвать его метод getLineNumber().

...