2013-03-10 28 views
6

Desidero leggere un file XML utilizzando QXmlStreamReader, ma in realtà non so dove si trova il problema. La mia funzione legge il contenuto del primo tag, ma poi si ferma.Lettura di un file XML utilizzando QXmlStreamReader

La forma del file XML:

<?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> 

La funzione:

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; 
     } 
    } 
} 

risposta

6

il problema era in forma di documento XML. Avevo bisogno di creare un tag radice.

La nuova forma del documento è:

<?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> 
Problemi correlati