Traitement XML trop long et plante
Bonsoir :)
J'ai un nouveau problème...
Je traite mon fichier xml tout va bien mais j'ai rajouté pas mal de petite balise à traiter et là par contre ça plante...
Je sais pas pourquoi quand on en met trop ça ne fonctionne plus...
J'utilise SAX faut il que je passe sur DOM ?
Voilà le code pour vous donnez une idée de la longueur si jamais c'est pas le problème du nombre de balise :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
void FenInfos::traitement_xml()
{
QList<QString> results;
QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
QXmlStreamReader reader(reply->readAll());
reader.readNext();
reader.readNext();
while (!reader.atEnd())
{
if (reader.isStartElement())
{
if (reader.name() == "root")
{
reader.readNext();
while(reader.isStartElement()==false)
reader.readNext();
if(reader.name() == "film")
{
reader.readNext();
while(reader.isStartElement()==false)
reader.readNext();
if(reader.name() == "titre")
{
QString Titre = reader.readElementText();
results.append(Titre);
reader.readNext();
while(reader.isStartElement()==false)
reader.readNext();
}
else if(reader.name() == "date_sortie")
{
QString Date_sortie = reader.readElementText();
results.append(Date_sortie);
reader.readNext();
while(reader.isStartElement()==false)
reader.readNext();
}
else if(reader.name() == "realise_par")
{
QString Realise_par = reader.readElementText();
results.append(Realise_par);
reader.readNext();
while(reader.isStartElement()==false)
reader.readNext();
}
else if(reader.name() == "titre_original")
{
QString Titre_original = reader.readElementText();
results.append(Titre_original);
reader.readNext();
while(reader.isStartElement()==false)
reader.readNext();
}
else if(reader.name() == "genre")
{
QString Genre = reader.readElementText();
results.append(Genre);
reader.readNext();
while(reader.isStartElement()==false)
reader.readNext();
}
else if(reader.name() == "duree")
{
QString Duree = reader.readElementText();
results.append(Duree);
reader.readNext();
while(reader.isStartElement()==false)
reader.readNext();
}
else if(reader.name() == "annee_production")
{
QString Annee_production = reader.readElementText();
results.append(Annee_production);
reader.readNext();
while(reader.isStartElement()==false)
reader.readNext();
}
else if(reader.name() == "distributeur")
{
QString Distributeur = reader.readElementText();
results.append(Distributeur);
reader.readNext();
while(reader.isStartElement()==false)
reader.readNext();
}
else if(reader.name() == "synopsis")
{
QString Synopsis = reader.readElementText();
results.append(Synopsis);
reader.readNext();
while(reader.isStartElement()==false)
reader.readNext();
}
else if(reader.name() == "lien_image")
{
QString Lien_image = reader.readElementText();
results.append(Lien_image);
}
}
}
}
reader.readNext();
}
reply->deleteLater();
affichage(results);
} |
Et le fichier XML est comme ceci : (je pense que le plantage vient surtout de synopsis mais c'est pas toujours le cas mais en tout cas quand je le mets sa plante direct.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
<?xml version="1.0" encoding="utf-8"?>
<root>
<film>
<titre>Shooter tireur d'élite</titre>
<date_sortie>18 avril 2007</date_sortie>
<realise_par>Antoine Fuqua</realise_par>
<titre_original>Shooter</titre_original>
<genre>Action</genre>
<duree>02h04min</duree>
<annee_production>2007</annee_production>
<distributeur>Paramount Pictures France</distributeur>
<synopsis><![CDATA[L'éclaireur et tireur d'élite Bob Lee Swagger s'est couvert de gloire sur divers fronts avant qu'une odieuse trahison ne l'amène à quitter les Marines et à se couper du monde. Reclus dans un chalet, au sommet d'une montagne quasi inaccessible, Swagger pense avoir tourné la page et se croit désormais à l'abri de toute nouvelle mésaventure.
Mais lorsque le colonel Isaac Johnson vient le relancer et lui demande une fois de plus son aide pour déjouer un complot imminent contre le Président des Etats-Unis, le "shooter" ne peut se dérober à son devoir.
Comment pourrait-il anticiper le piège diabolique qui lui est tendu et deviner qu'il va bientôt se retrouver accusé de tentative de meurtre ? Traqué à travers tout le pays par une meute de mercenaires, il est obligé de mobiliser toutes ses ressources pour survivre, retrouver son honneur et déjouer la plus terrifiante des conspirations.]]></synopsis>
<lien_image>http://images.allocine.fr/r_160_214/b_1_cfd7e1/medias/nmedia/18/63/77/83/18750618.jpg</lien_image>
</film>
</root> |
Merci !