Le XML pour fichier de configuration?

Résolu
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 - 2 mai 2006 à 17:14
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 - 5 mai 2006 à 17:39
Comme je viens de me mettre à .NET, je me suis dit que j'allais laisser tomber les vieux fichiers ini pour la configuration au profit du XML. 3 points m'ont poussé à me diriger vers le XML :
 - Le XML, c'est in
 - Le XML, c'est branché
 - Le XML, c'est la classe
Partant avec tous ces arguments -vous conviendrez- fortemment convaincants, mon application .NET doit donc utiliser un xml en guise de fichier de configuration.

Mais voilà, avec mes vieux fichiers INI, Pour écrire une valeur, il suffisait de faire f(header,variable,valeur,fichier) avec la fonction adéquate, et pour lire une valeur f(header,variable,fichier). Je pensais donc que Microsoft qui a beaucoup fait pour promouvoir ce format nous avait concocté des fonctions du même genre.

Que neni ! C'est quoi ce bordel ? Y'a 35610 façons d'ouvrir un fichier XML et 28418451 façons d'écrire dedans...

Tout ça pour en venir à ma question, si je veux utiliser le XML pour fichier de configuration, je fais comment pour récupérer la valeur d'une rubrique précise ?

(pour l'instant j'ai trouvé la méthode :
            XmlDocument config = new XmlDocument();
            config.Load(Application.StartupPath + "\\configuration.xml");

            XmlNodeList elemList = config.GetElementsByTagName("ma_rubrique");
            variable = elemList[0].InnerText;
mais ça à pas l'air très propre)

Et surtout, comment je fais pour écrire une valeur précise dans ce µ%$ de XML sans écraser tout le fichier ?

Merci
A voir également:

7 réponses

sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 1
3 mai 2006 à 10:07
en gros, tu peux faire ca, si tu veux, a mon avis c'est la facon la plus simple d'acceder a un element.

XmlDocument doc = new XmlDocument();
doc.Load(fichier_xml);

XmlNode section = doc.SelectSingleNode("root/ma_section/ma_sous_section");
// modification de la XmlNode, genre section.Name = "truc" ou autre...

doc.Save(fichier_xml);
3
sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 1
5 mai 2006 à 09:52
Oula oula, biensure que non... tu recupère un XmlNode, donc il faut faire comme ca :

XmlAttribute attr = section.Attributes["propriete1"];
if (attr != null)
val = attr.Value;

attr = section.Attributes["propriete2"];
if (attr != null)
val = attr.Value;

tu peux aussi faire :

foreach (XmlAttribute current_attr in section.Attributes)
// traitement de l'attribut current_attr

Si tu utilise un IDE qui te permet de voir le contenu d'un objet lorsque tu tappe . (point)
(VisualStudio, Eclipse, SharpDevelop, etc...) dans ce cas je te conseil de bien regarde le contenu de la class XmlNode, elle recèlle plusieurs trucs très interessant :)
3
24 ans Messages postés 231 Date d'inscription lundi 27 novembre 2000 Statut Membre Dernière intervention 7 juillet 2008 2
3 mai 2006 à 10:14
Salut cher ami
essaye ce bout de code


XmlDocument xmlDoc= new XmlDocument();


xmlDoc.Load(Application.StartupPath +"\\Configuration.xml");


XmlNodeReader xnr= new XmlNodeReader(xmlDoc);


ds=new DataSet() ;


ds.ReadXml(xnr); // à ce stade votre DataSet est rempli et ainsi vous pouvez effectuer vos modification
                                // soit ajouter ou modifier ou supprimer
                                // Exemple 
 ds.Tables["Numero du DataTable"].Rows["Numéro de ligne"][
"Nom Colonne"]= "Visual Studio 2005";
                               
                                //Numéro de ligne signifie le numero de la ligne dans la table
                                // il faut savoire que le DataSet contient des DataTable



 
String

 Chaine=  ds.Tables["Numero du DataTable"].Rows["Numéro de ligne"][
"Nom Colonne"].ToString():
 
0
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
3 mai 2006 à 19:03
Ta fonction marche seb.

Par contre, doc.Load charge tout le fichier XML en mémoire non ? Là ca va parceque j'ai un ptit XML de configuration, mais pour les grosses applis, ca ne pose pas de problème?

Quant aux Datasets, je ne vais pas y toucher pour le moment, m'ai j'essayerai quand meme la deuxième solution proposée par curiosité ;o

Merci :>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 1
3 mai 2006 à 22:20
quand tu ouvre un fichier XML de plusieurs Mega avec Internet Explorer (pour le visualiser) il faut bien qu'il charge tout. Parfois c'est un peu lent si le fichier est vraiment massif, mais je ne vois pas en quoi ca pose un probleme :)
0
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
4 mai 2006 à 23:54
Non, ce que je veux dire, c'est qu'il pourrait lire le fichier XML au fur et à mesure sans tout charger dans la RAM. Bon ok je chipotte :p

Un autre truc me chagrine, c'est le OuterXml. En gros, avec ta méthode, c'est super je peux récupérer simplement la string entre les balises via

XmlNode section = doc.SelectSingleNode("root/ma_section/ma_sous_section");
section.InnerText

Mais si j'ai une balise de type

<hello propriete1="ok" propriete2="ko"/>

La seule façon que j'ai trouvé de récupérer les attributs ok et ko, c'est d'utiliser
XMLNode.OuterXml et de traiter toute la chaine de caractère "hello propriete1="ok" propriete2="ko"" à grands coups de splits et autres. Bref, c'est pas joli joli. Y'a t-il une autre méthode?
0
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
5 mai 2006 à 17:39
Ah c'est donc planqué dans Attributes ^^

Merci :>

Effectivement j'utilise un IDE et j'avais tenté de trouvé moi meme ou se trouvaient ces données avec le debugger de Visual Studio. Et le seul endroit où j'ai trouvé qu'on pouvait récupérer les données, c'était dans OuterXml. Je devais pas être bien reveillé/
0
Rejoignez-nous