2009-03-28 6 views
1

Ich bin eine XML-Datei mit QXmlDefaultHandler wie diese Analyse:Wie erhält man eine Zeilennummer beim Parsen mit 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); 
} 

I Zeilennummern für Fehlermeldungen wissen müssen. Wie kann ich sie bekommen?

Antwort

0

Ich selbst antworten.

Ich war nicht ganz klar in meiner Frage, weil ich nicht geschrieben habe, dass ich meine eigenen benutzerdefinierten Fehlermeldungen generieren muss. Zum Beispiel muss ich die Validierung bestimmter Attribute komplizieren. Dann, wenn das Attribut ungültig ist, muss ich eine Nachricht wie schreiben: "Fehler in Zeile 15454 Spalte 48, Attritubute 'Nummer' sollte eine Primzahl sein, ist aber 65536 '.

Der Ansatz von Ariya Hidayat vorgeschlagen funktioniert nur für Nachrichten von dem SAX-Parser selbst (wie fehlerhafte XML) erzeugt.

Für benutzerdefinierte Nachrichten ich brauche setDocumentLocator (QXmlLocator * locator) zu überlasten, die mich über den aktuellen Locator erzählt, und irgendwo den Wert des Locators wie savedLocator = locator; tatsächliche Zeilennummer erhalten wird durch locator->lineNumber(). speichern