2009-03-28 4 views
1

Je suis l'analyse d'un fichier xml avec QXmlDefaultHandler comme ceci:Comment obtenir un numéro de ligne lors de l'analyse avec 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); 
} 

Je dois savoir les numéros de ligne pour les messages d'erreur. Comment puis-je les obtenir?

Répondre

0

Répondre moi-même.

Je n'étais pas complètement clair dans ma question parce que je n'ai pas écrit que j'ai besoin de générer mes propres messages d'erreur personnalisés. Par exemple, je dois faire des validations compliquées de certains attributs. Ensuite, si l'attribut est invalide, j'ai besoin d'écrire un message comme: "Erreur sur la ligne 15454 colonne 48, attritubute 'nombre' devrait être un nombre premier, mais est 65536 '

L'approche proposée par Ariya Hidayat ne fonctionne que pour les messages générés par l'analyseur SAX lui-même (comme XML malformé).

pour les messages personnalisés dont j'ai besoin de surcharger setDocumentLocator (QXmlLocator * locator) qui me dit au sujet de la localisation actuelle et enregistrer quelque part la valeur du localisateur comme savedLocator = locator; numéro de la ligne est obtenue par locator->lineNumber().

Questions connexes