Bonjour, en ce moment j'enchaîne un peu les questions.
J'ai une classe en C# qui utilise des paramètres :
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public class MaClasse { // Paramètres const string DB_NAME = "ma_base"; const string TABLEA_NAME = "tablea"; const string FIELD_a1 = "champ_a1"; const string FIELD_a2 = "champ_a2"; const string FIELD_a3 = "champ_a3"; const string TABLEB_NAME = "tableb"; const string FIELD_b1 = "champ_b1"; const string FIELD_b2 = "champ_b2"; (...) // et je fais des trucs } // et je m'en vais
ce que j'aimerais, c'est pouvoir récupérer ces paramètres depuis un fichier XML au lieu de les entrer en dur dans mon code.
Voilà ce que j'ai fait pour l'instant, avec les commentaire de ce que je pense avoir compris :
Code parametres.xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <mesparametres> <database nom='ma_base'> <table id='a' name='tablea'> <field_a1>mon_champ_a1</field_a1> <field_a2>mon_champ_a2</field_a2> </table> <table id='b' name='tableb'> <field_b1>mon_champ_b1</field_b1> <field_b2>mon_champ_b2</field_b2> <field_b3>mon_champ_b3</field_b3> </table> </database> </mesparametres>
Code C# : 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
63
64 public class MaClasse { // Paramètres string DB_NAME; string TABLEA_NAME; string FIELD_a1; string FIELD_a2; string FIELD_a3; string TABLEB_NAME; string FIELD_b1; string FIELD_b2; public MaClasse() { XmlTextReader reader = new XmlTextReader("parametres.xml"); reader.MoveToContent(); // entre dans l'enveloppe <mesparametres> reader.ReadToDescendant("database"); // entre dans l'enveloppe <database> reader.MoveToAttribute("nom"); // lit l'attribut "nom" DB_NAME = reader.Value; string reader_name = null; // garde nom de la balise en mémoire // Lit le xml jusqu'à </database> while(reader.Read() && reader.LocalName != "database") { // enveloppe <table> ayant un attribut id défini if (reader.LocalName == "table" && reader.GetAttribute("id") != null) { // table a if(reader.GetAttribute("id") == "a") { // Lit le xml jusqu'à </table> while (reader.Read() && reader.LocalName != "table") { // Si lal valeur lue est non nulle (i.e dans ce cas mon_champ_a1 ou mon_champ_a2) if (reader.Value != null && reader.Value != "") { switch (reader_name) { case "field_a1": if (FIELD_a1 == null) { FIELD_a1 = reader.Value; } break; case "field_a2": //etc default: break; } } reader_name = reader.Name; } } if(reader.GetAttribute("id") == "b") { //idem } } } } (...) }
En faisant quelques essais dessus, ça a l'air de marcher. Mais ma (très) humble opinion je trouve que c'est vraiment du bricolage.
j'ose espérer qu'il y a des fonctions qui permettent de faire ça plus simplement. Est-ce que vous pourriez m'éclairer là-dessus?
Merci d'avance.
Partager