这是我要阅读的 XML 格式:
<base>
<pasta>name
<musica>my audio.mp3</musica>
<musica>my audio.mp3</musica>
<musica>my audio.mp3</musica>
<musica>my audio.mp3</musica>
</pasta>
<pasta>name2
<musica>my audio.mp3</musica>
<musica>my audio.mp3</musica>
</pasta>
</base>
我用来读取 xml 的代码:
QList<PastaBase>* BaseWrapper::carregarDeXml(QString caminhoArquivoXml)
{
//Carrega do XML
QFile arquivoXml(caminhoArquivoXml);
if(!arquivoXml.open(QIODevice::ReadOnly))
{
QString s(QString::fromUtf8("Erro ao abrir arquivo de base"));
QMessageBox::warning(0, "Erro", s);
throw QString("Erro ao abrir arquivo de base");
}
QList<PastaBase> *base = new QList<PastaBase>();
QXmlStreamReader r;
r.setDevice(&arquivoXml);
while(!r.atEnd() && !r.hasError())
{
r.readNext();
if(r.isStartElement())
{
if(r.name().toString() == QString("pasta"))
{
PastaBase p;
p.setNome(r.readElementText());
r.readNextStartElement();
while(r.name().toString() == QString("musica"))
{
std::cout << "elemento: " << r.name().toLatin1().constData() << " - valor: " << r.readElementText().toLatin1().constData() << std::endl;
p.getMidias()->append(r.readElementText());
r.readNextStartElement();
}
base->append(p);
}
}
}
arquivoXml.close();
return base;
}
输出 - 卡在 while 循环中:
elemento: musica - valor:
elemento: musica - valor:
elemento: musica - valor:
elemento: musica - valor:
elemento: musica - valor:
elemento: musica - valor:
elemento: musica - valor:
elemento: musica - valor:
...
...
...