IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Compter le nombre de section dans un xml ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 30
    Par défaut Compter le nombre de section dans un xml ?
    Bonjour à tous,

    cela fait plusieurs jours maintenant que je me sers de mon ami google pour trouver un bon moyen d'utiliser des xml avec c# ayant peu de notions dans ce language (genre les messages box et les savedialog...merci mon "super" prof d'info !)
    Bref je vous explique je veux faire une appli avec un fichier config, donc j'ai fait la méthode classique qu'on trouve dans google, a savoir joindre un fichier de config a l'appli appeler app.config, faire la référence au System.Configuration et je l'ai rempli de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <configuration>
    	<configSections>
    		<section name="Usine1" type="System.Configuration.SingleTagSectionHandler"/>
    		<section name="Usine2" type="System.Configuration.SingleTagSectionHandler"/>
    	</configSections>
    		<Usine1 nom="XXX" code="9800" debutip="192.168.20." finip="60"/>
    		<Usine2 nom="XXX" code="9801" debutip="192.168.21." finip="60"/>
    </configuration>
    où le nombre d'usine peut changer bien entendu...
    j'ai besoin de savoir s'il est possible de récuperer le nombre de section name dans ce xml (je parle d'un truc propre )
    ainsi je pourrais faire une boucle avec un i, allant de 1 a X ou X est le num de ma derniere usine, me permettant de récupérer les valeurs des noeuds nom et code pour chaque usine...
    et mon prog s'adaptant ainsi, si de nouvelles usines apparaissent sans modif du code.
    pour finir chaque section["nom"] et section["code"] de chaque usine vont se retrouver dans deux combobox, une pour les noms, une pour les codes...

    Voila j'espere avoir été assez clair, je sais pas si ma démarche est la bonne mais comme je vous le dis je suis nouveau dev et j'ai pas forcément la bonne reflexion, peut etre qu'un autre code xml serait plus adéquate ? je suis ouvert a toutes vos pistes ! Merci d'avance

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Avec AppSettings ne récupères tu pas toutes tes sections dans une liste, collection, ou autre ?

    Si c'est le cas il te suffirait de faire un foreach dessus et tu la parcourerais dans son enssemble et accéderais à tous les éléments.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 30
    Par défaut
    salut et merci de ta réponse

    accéder aux éléments n'est pas un problème j'ai fait un new hashtable de la section qui m'interesse et je recupere ensuite la valeur des noeuds en fonction de ma section. par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
           for (int i = 1; i = ???? (); i++)
                    {
                        Hashtable section = (Hashtable)ConfigurationManager.GetSection("Usine"+i);
                        comboBox1.Items.Add(section["nom"]);
                    }
    voila en gros j'ai déja mon idée de code, sauf que je ne sais pas comment définir la derniere valeur de i qui doit etre égale au nombre de "<Section name=" présent dans mon fichier xml...
    la je suis sur msdn et apparemment avec un NameVallueCollection on peut faire un .count de nos valeurs...seulement ce qui m'interesse c'est pas le nombre de valeur de noeuds, mais le nombre de SECTION...
    c'est plus clair ?

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    essaye un truc comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    NameValueCollection appSettings = ConfigurationManager.AppSettings;
    string[] key= new String[appSettings.Count];
    appSettings.CopyTo( key, 0 );
    foreach ( string value in key )
    {
    .....
    }
    AppSettings:
    ConfigurationManager.AppSettings, propriété
    Remarque : cette propriété est nouvelle dans le .NET Framework version 2.0.

    Obtient les données AppSettingsSection pour la configuration par défaut de l'application actuelle.
    Valeur de la propriété
    Retourne un objet NameValueCollection contenant le contenu de l'objet AppSettingsSection pour la configuration par défaut de l'application actuelle.
    NameValueCollection :
    Représente une collection de clés String et de valeurs String associées accessibles soit par la clé, soit par l'index.
    De façon générlae j'ai trouvé tout cela ici :
    http://msdn2.microsoft.com/fr-fr/lib...er(VS.80).aspx

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 30
    Par défaut
    yep ced encore merci une fois de plus mais j'ai aussi vu cet article
    et de ce que j'en ai compris, NameVallueCollection te sort les pairs "valeur/clé" et donc je pense que faire un .count me retournera 4 (pour les paires nom,code,debutip,finip) ou peut etre 8 car 4*2 sections...
    bref je n'arrive pas a l'utiliser pour que le count sortent simplement le nombre de section name crée. j'esperais trouver un truc dans les getsection qui se rapproche mais que néni alors finalement je viens de faireu ntruc pas très propre a savoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int i=1;
                    while ( (i < 99) && ((Hashtable)ConfigurationManager.GetSection("Usine"+i)!=null))                
                    {
                        Hashtable section = (Hashtable)ConfigurationManager.GetSection("Usine"+i);
                        comboBox1.Items.Add(section["nom"]);
                        i++;
                    }
    voila comme on aura 99 usines le jour où le soleil ne brillera plus je me dis que je prends pas trop de risques...et ma deuxieme condition fait que je ne perds pas de temps a tester des valeurs inutiles...
    Merci quand même

  6. #6
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 163
    Par défaut
    Peut être que je vais dire une connerie car le contexte me semble plutot obscure mais pourquoi n'utilise-tu pas le XPath ?

Discussions similaires

  1. compter nombre de noeud dans un XML
    Par geek21 dans le forum Flex
    Réponses: 36
    Dernier message: 14/08/2009, 15h46
  2. Réponses: 4
    Dernier message: 01/02/2008, 13h39
  3. Réponses: 6
    Dernier message: 11/02/2005, 06h41
  4. [SQL][ACCESS]Compter le nombres d'enregistrement dans deux..
    Par pc152 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 05/06/2004, 12h30
  5. Réponses: 2
    Dernier message: 02/03/2004, 19h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo