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 :

Lecture séquentielle de noeuds dans fichier de conf


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 63
    Points : 44
    Points
    44
    Par défaut Lecture séquentielle de noeuds dans fichier de conf
    Bonjour a tous,

    Je suis actuellement coincé sur un problème dans le développement de mon application, plus précisément en rapport avec le XML du fichier de conf.

    Je souhaite récupérer les valeurs de mes nœuds qui sont stocké dans ce fichier, qui est constitué de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <configuration>
      <section name="Fournisseur" type="MonNameSpace.FournisseurSectionHandler, MonNameSpace"/>
      <Fournisseur>
        <Berner>
        </Berner>
        <Wurth>
          <numColCodeAD>1</numColCodeAD>
          <numColNomADWu>2</numColNomADWu>
          <numColMontHTWu>3</numColMontHTWu>
          <numColNumFactWu>4</numColNumFactWu>
          <nbColonneCalculéW>4</nbColonneCalculéW>
        </Wurth>
      </Fournisseur>
    </configuration>
    Ce que j'aimerai réussir a faire, c'est parcourir le nœud "Fournisseur" pour récupérer les valeurs des nœuds enfant (dans l'exemple Wurth et Berner).
    J'ai beau chercher sur le net et testé des solution rien ne marche, je suis donc dans l'impasse.

    J'attends vos conseil, à plus tard

  2. #2
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 652
    Points : 2 180
    Points
    2 180
    Par défaut
    Bonjour,

    En utilisant XDocument et des requêtes Linq , on peut facilement récupérer des données en XML.Il y a aussi XPath mais que je connais moins. Essaye de voir de ce coté la .

    Regarde aussi le code de cette source , je manipule des données XML dans des nœuds , en espérant que ça puisse t'aider : Exemple Google Maps

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 63
    Points : 44
    Points
    44
    Par défaut
    Bonjour PixelJuice,

    J'ai bien regardé le code de ta source, mais je n'y est pas trouvé beaucoup de chose pour m'avancer.
    Par contre j'ai trouvé mon bonheur dans la doc de XDocument, ce qui m'a permis de créer ceci mais ca ne fonctionne pas.

    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
    class FeedXML 
        {
            public void chargementXML()
            {
                XmlDocument unxml = new XmlDocument();
                try
                {
                    unxml.Load("appFourn.config");
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Erreur");
     
                }
     
                XmlNodeList myChildNode = unxml.GetElementsByTagName("node");
                foreach (XmlNode unNode in myChildNode)
                {
                    MessageBox.Show(unNode.Attributes[0].InnerText);
                }
            }
        }
    Lors de la compilation, le fichier XML ne se charge pas et je tombe dans l'exception "erreur".

  4. #4
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Points : 1 056
    Points
    1 056
    Par défaut
    Sans nous dire ton exception ce n'est pas évident...

    Mais la première chose qui me vient à l'esprit : Est-ce-que ton fichier "appFourn.config" est dans ton répertoire "\bin\Debug".
    Sinon il faut lui préciser le chemin complet du fichier.

    XmlDocument.Load

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 63
    Points : 44
    Points
    44
    Par défaut
    Sans nous dire ton exception ce n'est pas évident...
    Celle qui est géré dans mon code, c'est a dire que le fichier n'est pas lu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     catch (Exception ex)
                {
                    MessageBox.Show("Erreur");
     
                }
    En effet, avec le chemin complet la lecture du fichier XML fonctionne, mais j'aime pas vraiment savoir que le chemin est en dur dans mon code...
    Lorsque que mon appli sera compilé, le chemin ne sera plus le même non?

  6. #6
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Points : 1 056
    Points
    1 056
    Par défaut
    C'est sûr qu'il faut éviter de mettre le chemin en dur.
    Quelques solutions :
    • Une constante (il faudra recompiler pour modifier la valeur)
    • Un paramètre de config (Juste besoin de modifier le fichier de conf)
    • Un paramètre de ton application (L'utilisateur ou ton programme recherche le chemin du fichier)

    Il y a surement d'autre solutions...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 63
    Points : 44
    Points
    44
    Par défaut
    Dans le cas ou je compile mon application, cela implique que le chemin que j'aurai indiqué (même si mis dans le fichier de conf) est changé.

    Mais il ferra bien parti des fichier utilisé lors de son installation, comment je peux indiqué le chemin de ce fichier XML qui marchera à partir de n'importe quel installation du logiciel en lui même, quelque chose comme ./appFourn.config

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 63
    Points : 44
    Points
    44
    Par défaut
    Petite essaie ce matin, j'ai donc mis le chemin de mon fichier XML dans mon fichier de conf, mais lors de la compilation et de son installation sur un autre poste, mon appli ne retrouve plus le fichier XML :-(

    Edit:

    C'est bon en changent le paramètre d'action de génération de mon fichier XML sur "Contenu", mon application retrouve bien le chemin du fichier XML même en l'installant sur d'autre machine.

    Par contre, je n'arrive toujours pas à lire mon noeud "Fournisseur"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    XmlNodeList myChildNode = unxml.GetElementsByTagName("Fournisseur");
                foreach (XmlNode unNode in myChildNode)
                {
     
                    MessageBox.Show(unNode.Attributes[0].InnerText);
                }
    "myChildNode" ne contient rien :/

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 63
    Points : 44
    Points
    44
    Par défaut
    Bon ca, avance tout doucement

    -J'arrive à lire mon fichier XML, n'importe ou qu'il soit
    -J'arrive à lire mon noeud "Fournisseur"
    -J'arrive à afficher ce que je lis

    Le soucis maintenant c'est que je lis tout les noeud enfant de mon noeud parent "Fournisseur"
    Voici comme est le fichier XML actuellement:
    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
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <section name="Fournisseur" type="MonNameSpace.FournisseurSectionHandler, MonNameSpace"/>
      <Fournisseur>
        <Berner>
          <numColCodeAD>1</numColCodeAD>
        </Berner>
        <Wurth>
          <nom>Wurth</nom>
          <Colonne>
          <numColCodeAD>1</numColCodeAD>
          <numColNomADWu>2</numColNomADWu>
          <numColMontHTWu>3</numColMontHTWu>
          <numColNumFactWu>4</numColNumFactWu>
          <nbColonneCalculéW>4</nbColonneCalculéW>
          </Colonne>
        </Wurth>
      </Fournisseur>
    </configuration>
    Avec comme classe pour lire mon fichier XML:
    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
    class FeedXML 
        {
            public void chargementXML()
            {
                XmlDocument unxml = new XmlDocument();
                try
                {
                    unxml.Load("E:\\Sources Dev\\Appli_Wurth\\Appli_Wurth\\appFourn.config");// Ne pas faire attention au chemin en dur uniquement pendant le developpement
                    MessageBox.Show("Chargement OK");
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Erreur");
     
                }
     
                XmlNodeList myChildNode = unxml.GetElementsByTagName("Fournisseur");
                foreach (XmlNode unNode in myChildNode)
                {
     
                    MessageBox.Show(unNode.InnerText);
                }
            }
        }
    Une idée?

    Ps: J'espère ne pas floodé en posté plusieurs message de suite, je me dit que cela pourra servir a quelqu'un que d'avoir la trame complète de l’avancement de la solution à ce problème

  10. #10
    Membre expérimenté
    Avatar de charouel
    Homme Profil pro
    Freelance
    Inscrit en
    Mars 2009
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 618
    Points : 1 454
    Points
    1 454
    Billets dans le blog
    9
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     private string GetValue()
            {
                XmlDocument bdd = new XmlDocument();
                bdd.Load("NameOfWeb.Config");
                XmlNode node = bdd.SelectSingleNode("//configuration/userSettings/NameSpace .ConfigurationfileName /setting[@name='Neud à parcourir ']/value");
                return node.InnerText;
            }

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 63
    Points : 44
    Points
    44
    Par défaut
    Bonjour charouel,

    J'ai essayé ta proposition, voici l'erreur ressorti lors de la compilation.

    Informations supplémentaires*: '//configuration/userSettings/NameSpace .ConfigurationfileName /setting[@name='Fournisseur']/value' a un jeton non valide.

  12. #12
    Membre expérimenté
    Avatar de charouel
    Homme Profil pro
    Freelance
    Inscrit en
    Mars 2009
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 618
    Points : 1 454
    Points
    1 454
    Billets dans le blog
    9
    Par défaut
    pour lire le neud Fournisseur tu met juste
    Configuration\Fournisseur

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 63
    Points : 44
    Points
    44
    Par défaut
    J'ai l'impression de vraiment passé pour un débutant ..

    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XmlNode node = unxml.SelectSingleNode("//configuration/userSettings/Appli_Wurth. appFourn.settings/setting[@name='Fournisseur']/value");
    Même erreur

  14. #14
    Membre expérimenté
    Avatar de charouel
    Homme Profil pro
    Freelance
    Inscrit en
    Mars 2009
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 618
    Points : 1 454
    Points
    1 454
    Billets dans le blog
    9
    Par défaut
    Voila pour récupéré tt la neud XML

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private string GetValue()
            {
                XmlDocument bdd = new XmlDocument();
                bdd.Load("Doc.xml");
                XmlNode node = bdd.SelectSingleNode("//configuration/Fournisseur");
                return node.InnerXml;
            }

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 63
    Points : 44
    Points
    44
    Par défaut
    Ca fonctionne!

    Merci beaucoup pour ton coup de main.

    Est il possible de récupérer uniquement les enfants "direct", c'est a dire dans mon exemple uniquement "Wurth" et pas les valeurs "12344" qui suivent?

  16. #16
    Membre expérimenté
    Avatar de charouel
    Homme Profil pro
    Freelance
    Inscrit en
    Mars 2009
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 618
    Points : 1 454
    Points
    1 454
    Billets dans le blog
    9
    Par défaut
    tu declare deux classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        public class Fournisseur
        {
            public string NameFournisseur{get; set;}
            public List<NumCol> NumCol { get; set; }
        }
     
        public class NumCol
        {
            public string NameCol { get; set; }
            public string Valeur { get; set; }
        }
    Ensuite tu fait ton code de récupération fournisseur
    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
     
     private XmlNode GetValue()
            {
                XmlDocument bdd = new XmlDocument();
                bdd.Load("Doc.xml");
                XmlNode node = bdd.SelectSingleNode("//configuration/Fournisseur");
                return node;
            }
     
            private List<Fournisseur> GetLstFournisseur()
            {
                var XmlFournisseur = GetValue();
                List<Fournisseur> LstFournisseur = new List<Fournisseur>();
     
                foreach (XmlNode nod in XmlFournisseur)
                {
                    Fournisseur Fournisseur = new Fournisseur();
                    Fournisseur.NameFournisseur= nod.Name ;
                    Fournisseur.NumCol = new List<NumCol>();
                    foreach (XmlNode nodN2 in nod)
                    {
                        NumCol NumCol = new NumCol (); 
                        NumCol.NameCol= nodN2.Name;
                        NumCol.Valeur = nodN2.InnerText;
     
                        Fournisseur.NumCol.Add(NumCol);
     
                    }
                    LstFournisseur.Add(Fournisseur);
                }
                return LstFournisseur;
            }
    Dans ton main tu appel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     var LstFournisseur = GetLstFournisseur();

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 63
    Points : 44
    Points
    44
    Par défaut
    Ca fonctionne!

    Merci vraiment pour ta solution.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 31/08/2010, 11h19
  2. Réponses: 0
    Dernier message: 12/04/2010, 12h08
  3. Lecture d'un noeud sur fichier xml
    Par soiz775 dans le forum C#
    Réponses: 1
    Dernier message: 01/06/2009, 08h19
  4. Ajout/Supression de blocs dans fichier de conf
    Par debotux dans le forum Langage
    Réponses: 2
    Dernier message: 09/12/2008, 19h08
  5. Lecture nom et contenu dans fichier
    Par Tempotpo dans le forum Langage
    Réponses: 2
    Dernier message: 19/05/2006, 14h11

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