Programmation Qt/Sauvegarder des données avec XML

Pour communiquer avec les fichiers XML, il faut d'abord importer le nouveau module du nom de codice_1. Ajoutez la ligne codice_2 à chaque début de fichier qui communique avec l'XML. Dans le fichier codice_3, ajoutez la ligne codice_4. Sous Windows, il faudra mettre les fichiers DLL codice_5 et codice_6.
Utilisation du module codice_1.
Création du fichier.
Bien évidemment, il faut créer le fichier. Par exemple, un fichier codice_8 :
<?xml version="1.0" encodage="UTF-8" ?>
<wikimedia>
 <project>Wikipedia</project>
 <project>Wikibooks</project>
 <project>Wikimedia Commons</project>
</wikimedia>
Ce n'est qu'un exemple.
Chargement du fichier.
Pour charger le fichier, on utilise deux classes : codice_9 et codice_10. Voici maintenant la méthode :
QDomDocument *dom = new QDomDocument("xml");
QFile xml_doc("wikimediaprojects.xml");
if(!xml_doc.open(QIODevice::ReadOnly)) /* On teste l'ouverture du fichier */
 QMessageBox::warning(this,"Erreur à l'ouverture du document XML","Le document XML n'a pas pu être ouvert.");
if (!dom->setContent(&xml_doc)) /* On teste l'attribution du fichier, c'est-à-dire qu'on met le document XML dans l'objet QDomDocument */
 xml_doc.close();
 QMessageBox::warning(this, "Erreur à l'ouverture du document XML", "Le document XML n'a pas pu être attribué à l'objet QDomDocument.");
xml_doc.close(); /* Maintenant, on peut fermer le fichier car tout est dans le QDomDocument */
Lecture du fichier.
Maintenant, il faut récupérer ce qu'il y a dedans. Nous allons voir plusieurs méthodes pour récupérer des informations.
codice_11.
La première méthode est la méthode codice_11. On l'utilise comme ceci :
/* Code précédent à introduire */
QDomElement elementWikimedia = dom.documentElement();
QDomNode noeudProject = elementWikimedia.firstChild();
QListWidget *listeProjects = new QListWidget();
while(!noeudProject.isNull()) /* Tant qu'on trouve des projets */
 elementProject = noeudProject.toElement; /* Transformation du noeud en élément */
 if(!elementProject.isNull())
 QListWidgetItem *itemProject = new QListWidgetItem(elementProject.text()); /* On met le texte de l'élément dans l'item de la liste */
 listeProjects->addItem(itemProject); /* Et on place l'item dans la liste */
 noeudProject = noeudProject.nextSibling();
codice_13.
Imaginons maintenant que vous avez un fichier comme ceci :
<?xml version="1.0" encoding="UTF-8" ?>
<wikimedia>
 <project lang="en">Wikibooks</project>
 <project lang="fr">Wikilivres</project>
</wikimedia>
Si on souhaite préciser la langue, on pourra par exemple mettre ceci :
QListWidgetItem *itemProject = new QListWidgetItem(QString(elementProject.text() + " (" + elementProject.attribute("lang", "?") + ")")); /* Cette fois-ci, on précise la langue entre parenthèses en combinant les QString */
listeProjects->addItem(itemProject);
Écriture dans le fichier.
Pour écrire dans le fichier, il faudra créer les éléments puis les introduire dans le fichier, que ce soit tous d'un coup ou un par un (la meilleure méthode est la première). Le principe est simple : on récupère l'ensemble du fichier, on le modifie, et enfin on remplace tout le fichier par le nouveau contenu.
Bilan.
Maintenant que vous avez appris à vous servir de l'XML, cela sera très intéressant. Il permettra d'enregistrer diverses informations, par exemple des scores pour un jeu vidéo, ou encore des marques-pages pour un navigateur web. Tiens, mais quel est sera le prochain TP ? C'est ! Mais avant ça, faisons un détour vers un autre moyen de sauvegarde, le SQL, dans le prochain chapitre →.

Le noyau atomique/Le modèle de la goutte liquide