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 :

Récupérer des paramètres depuis un fichier XML


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 39
    Points : 22
    Points
    22
    Par défaut Récupérer des paramètres depuis un fichier XML
    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.

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Pourquoi ne pas créer une section spécifique dans l'appconfig, plutot que de créer un XML à part ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 39
    Points : 22
    Points
    22
    Par défaut
    Parce que je n'ai pas compris ta phrase

    J'oubliais de dire, j'ai déja un fichier web.config dans lequel certains paramètres sont définis:

    Code web.config : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0"?>
    <configuration>
     
        <appSettings>
          <add key="param1" value="valeur1"/>
          <add key="param2" value="valeur2"/>
          <.../>
        </appSettings>

    et que je récupère avec la commande :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    param1 = ConfigurationManager.AppSettings["param1"];

    Pour le moment j'ai choisi de volontairement ne pas entrer les autres paramètres à la suite. En fait, il y a dans mon service 2 types de paramètres. D'un côté, les paramètres contenus dans un url qui appelle mon service : http://<monurl>?param1="value1"&param2="value2"...
    De l'autre, les paramètres que je veux récupérer via un xml.

    Par exemple, une des fonctions de mon webservice est de recevoir un url contenant un texte en paramètre (le texte est donc une variable), de chercher ce texte dans une table et de faire des opérations sur cette table en fonction du résultat de la recherche (le nom de la base, de la table et les noms des champs sont donc des constantes locales de mon service)

    Il me semblait donc préférable que les paramètres reçus via l'url, comme mon texte, soient dans un web.config, et que les constantes soient elles stockées dans un autre fichier.

    J'ai conscience que j'ai peut-être fait une mauvaise utilisation du web.config, encore une fois je débute.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2007
    Messages : 180
    Points : 198
    Points
    198
    Par défaut
    Perso, j'utilise plus la classe XmlDocument.

    Par exemple, tu peux sélectionner directement un noeud par le SelectSingleNode en fonction du commande XPath.

    Tu as des exemples sur le site :
    http://www.zvon.org/xxl/XPathTutoria.../example1.html
    J'ai trouvé les exemples bcp plus simple à comprendre que les explications sur w3c.org

    Aussi, pour ta partie switch, case, sur mon dernier dev, j'ai rajouté un attribut nb qui correspond aux nombres de noeuds. Tu fais une boucle pour récupérer toutes les valeurs fields que tu peux stocker dans un tableau.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Points : 218
    Points
    218
    Par défaut
    Salut,
    je suis du même avis que SaumonAgile
    Citation Envoyé par SaumonAgile Voir le message
    Pourquoi ne pas créer une section spécifique dans l'appconfig, plutot que de créer un XML à part ?
    c'est pas mal les sections personnalisées...
    tu l'ajoutes dans ton fichier de config,

    comme ça, ça t'évites de multiplier les fichiers de paramétrage (le config + le xml)

    tu trouveras tout ce qu'il y a à savoir ici (regarde surtout le paragraphe 8.3)

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 39
    Points : 22
    Points
    22
    Par défaut
    Merci pour vos réponses. Je suis pris par autre chose qui fait que je ne peux pas me plonger la-dedans tout de suite, mais apparemment j'ai la de la matière pour trouver mon bonheur

Discussions similaires

  1. extraction des attributs depuis un fichier XML
    Par pacomou dans le forum kettle/PDI
    Réponses: 4
    Dernier message: 12/12/2011, 11h51
  2. Récupérer des données depuis un fichier XML
    Par mox20 dans le forum jQuery
    Réponses: 1
    Dernier message: 28/01/2010, 00h40
  3. [DOM] Récupérer des données d'un fichier XML
    Par teramp3 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 30/07/2008, 16h15
  4. Intégre des données depuis un fichier xml
    Par KATE6447 dans le forum InfoPath
    Réponses: 5
    Dernier message: 20/03/2008, 13h32
  5. Récupérer des infos d'un fichier xml ?
    Par OtObOx dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 06/02/2006, 17h53

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