使用QXmlDefaultHandler解析时如何获取行号?

时间:2009-03-28 17:35:28

标签: qt

我正在使用QXmlDefaultHandler解析xml文件,如下所示:

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 个答案:

答案 0 :(得分:1)

使用传递给QXmlErrorHandler::error()函数的异常。您可以使用QXmlReader::setErrorHandler()设置自定义错误处理程序。

答案 1 :(得分:0)

回答自己。

我的问题并不完全清楚,因为我没有写过我需要生成自己的自定义错误消息。例如,我需要对某些属性进行复杂的验证。然后,如果属性无效,我需要编写如下消息:“第15454行第48行出错,attritubute'数字'应为素数,但为65536'。

Ariya Hidayat建议的方法仅适用于SAX解析器本身生成的消息(如格式错误的XML)。

对于自定义消息,我需要重载setDocumentLocator ( QXmlLocator * locator ),告诉我当前的定位器,并保存定位器的值,如savedLocator = locator;实际行号是locator->lineNumber().