2013-03-10 6 views
6

Ich möchte eine XML-Datei mit QXmlStreamReader lesen, aber ich weiß wirklich nicht, wo das Problem liegt. Meine Funktion liest den Inhalt des ersten Tags, aber dann stoppt es.Lesen einer XML-Datei mit QXmlStreamReader

Die Form der XML-Datei:

<?xml version="1.0" encoding="utf-8"?> 
    <student> 
     <firstName>mina</firstName> 
     <lastName>jina</lastName> 
     <grade>13</grade> 
    </student> 
    <student> 
     <firstName>Cina</firstName> 
     <lastName>fina</lastName> 
     <grade>13</grade> 
    </student> 

Die Funktion:

void MainWindow::open() { 
    QFile file(QFileDialog::getOpenFileName(this,"Open")); 
    if(file.open(QIODevice::ReadOnly)) { 
     QXmlStreamReader xmlReader; 
     xmlReader.setDevice(&file); 
     QList<Student> students; 
     xmlReader.readNext(); 
     //Reading from the file 
     while (!xmlReader.isEndDocument()) 
     { 
      if (xmlReader.isStartElement()) 
      { 
       QString name = xmlReader.name().toString(); 
       if (name == "firstName" || name == "lastName" || 
         name == "grade") 
       { 
        QMessageBox::information(this,name,xmlReader.readElementText()); 
       } 
      }else if (xmlReader.isEndElement()) 
      { 
       xmlReader.readNext(); 
      } 
     } 
     if (xmlReader.hasError()) 
     { 
      std::cout << "XML error: " << xmlReader.errorString().data() << std::endl; 
     } 
    } 
} 

Antwort

6

Das Problem in Form des XML-Dokuments war. Ich musste ein Root-Tag erstellen.

Die neue Form des Dokuments ist:

<?xml version="1.0" encoding="utf-8"?> 
    <students> 
     <student> 
      <firstName>mina</firstName> 
      <lastName>jina</lastName> 
      <grade>13</grade> 
     </student> 
     <student> 
      <firstName>Cina</firstName> 
      <lastName>fina</lastName> 
      <grade>13</grade> 
     </student> 
    </students>