Как получить номер строки при разборе с QXmlDefaultHandler? - PullRequest
1 голос
/ 28 марта 2009

Я анализирую xml-файл с помощью QXmlDefaultHandler следующим образом:

void Parser::ParseFilename(const char* pFilename)
{
  LOG_DEBUG("Parser::ParseFilename(%s)", pFilename);
  ClearState();

  m_inputFile.setFileName(pFilename);
  QXmlInputSource source( &m_inputFile );
  QXmlSimpleReader reader;

  reader.setContentHandler( this );
  reader.parse( source );
}

Мне нужно знать номера строк для сообщений об ошибках. Как я могу получить их?

Ответы [ 2 ]

1 голос
/ 28 марта 2009

Использовать исключение, которое передается в функцию QXmlErrorHandler :: error () . Вы можете установить собственный обработчик ошибок, используя QXmlReader :: setErrorHandler () .

0 голосов
/ 29 мая 2009

Отвечаю сам.

Я не совсем понял в своем вопросе, потому что я не написал, что мне нужно создавать свои собственные сообщения об ошибках. Например, мне нужно усложнить проверку определенных атрибутов. Затем, если атрибут недействителен, мне нужно написать сообщение типа: «Ошибка в строке 15454 столбца 48, attritubute« число »должно быть простым числом, но равно 65536».

Подход, предложенный Арией Хидаят, работает только для сообщений, генерируемых самим парсером SAX (например, искаженный XML).

Для пользовательских сообщений мне нужно перегрузить setDocumentLocator ( QXmlLocator * locator ), который сообщает мне о текущем локаторе, и сохранить где-нибудь значение локатора, например savedLocator = locator; Фактический номер строки получается как locator->lineNumber().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...