2013-03-10 7 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>