0
相続人は私が読みたいXMLの形式:Qtの読書XMLファイルQXmlStreamReader - ループに陥っ
<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:
...
...
...
なぜQStringRef.toLatin1()がコンパイルされ、ここで動作しているのか分かりません。 – fredcrs
XML子として私はあなたがそこにテキストを置くことができると思います...私はこのXMLを書くJavaで書かれた別のアプリケーションを持って....そして私はこの形式でXMLを保存する別のC++ Qtメソッドを持っています – fredcrs
とはい、エラーを引き起こしているこの行です – fredcrs