2013-03-10 108 views
6

我想使用QXmlStreamReader讀取XML文件,但我真的不知道問題出在哪裏。我的函數讀取第一個標籤的內容,但是然後停止。使用QXmlStreamReader讀取XML文件

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

功能:

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

回答

6

的問題是在XML文檔的形式。我需要創建一個根標籤。

文檔的新形式是:

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