Bonjour à tous,
Je travaille actuellement sur un projet de parser XML dans lequel je dois lire des champs XML et rentrer chacune de leurs valeurs dans mon modèle objet C++.
Le problème se pose lorsqu'une valeur n'a pas été spécifiée : je dois mettre une valeur par défaut correspondant au champ de la valeur inexistante et envoyer un message à l'utilisateur pour lui dire de remplir la valeur du champ incriminé.
Ainsi, l'utilisateur n'a pas besoin de remplir tous les champs du fichier XML s'il en connaît la valeur par défaut. S'il omet de remplir la valeur, il sera seulement alerté.
J'ai choisi d'envoyer les messages d'erreur via des exceptions. Il y a peut-être d'autres méthodes, si vous en avez, je vous invite à me les proposer !
Voici mon pseudo - code pour mieux comprendre :
Fonction run() : si lireTousLesChamps() tombe sur une exception, la lecture des champs s'arrête pour traiter l'exception, mais ce n'est pas ce que je veux. Je voudrais que le programme se contente d'envoyer le message d'exception mais en continuant de lire les champs. Y'a-t-il un moyen de traiter l'exception autrement afin que la lecture continue ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 class XMLData { ... protected : std::vector<ChampXML> listeChamps; public : remplirListeChamps() { ... } getListeChamps() { return listeChamps; } } class ParserXML { protected : XMLData* data; public : void lireTousLesChamps { listeChamps = data->getListeChamps(); for (int i = 0 ; i < listeChamps.size() ; i++) { ChampXML champCourant = listeChamps.at(i); if (champCourant.estCorrectementRempli()) { parserValeur(champCourant); } else { // monException : ressemble à std::exception mais prend un string en paramètre de message throw monException("Merci de remplir le champ n°" + std::string(i)); parserValeurParDefaut(champCourant); } } } void run() { try { lireTousLesChamps(); } catch(monException e) { std::cout << e.what() << std::endl; } } }
Merci à tous
Partager