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

Linq Discussion :

Problème liste enfants avec LinqToXml


Sujet :

Linq

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Problème liste enfants avec LinqToXml
    Bonjour,

    Je suis actuellement en train de realiser un projet en Silverlight (C#) et j'essayer de récuperer des recettes de cuisines ainsi que leurs ingrédients respectifs. Pour se faire j'ai un fichier XML qui contient le nom des recettes et leur ingrédients.
    Ce que j'aimerai faire en fait c'est à partir du document XML récuperer les informations et les mettre dans mes classes.
    J’ai une classe Recette qui contient :
    String Nom
    List<Ingredient> Ingredients
    Int difficulté

    Et une classe Ingredient qui contient :
    String Nom
    Int Quantité

    Le problème est le suivant, j'arrive à faire correspondre sans problème le nom des recettes avec l'attribut "Nom" de ma classe mais je n'arrive pas à faire en sorte dans mon code que, lors de la definition du nom de la recette , il créé en meme temps chacun des objet Ingredient et les ajoute à la liste Ingredients de mon instance Recette en cours.
    Je ne suis pas sur d'etre très clair dans mes explication donc n'hesitez pas à me poser des question. Ci dessous un extrait du XML et le code avec lequel je récupere mon tableau actuellement.


    Je vous remercie tous par avance.

    Cordialement.


    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <Recettes>
     
      <Recette>
        <Nom>Pate a crepe</Nom>
        <Ingredients>
          <Ingredient>
            <Nom>Farine</ Nom >
            <Quantite>500</ Quantite >
          </Ingredient>
          <Ingredient>
            <Nom>Oeufs</ Nom >
            <Quantite>2</ Quantite >
          </Ingredient>
          <Ingredient>
            <Nom>Lait</ Nom >
            <Quantite>50</ Quantite >
          </Ingredient>
        </Ingredients>
        <difficulte>3</RequiredSkill>
      </Recette>
      <Recette>
        <Nom>Pates carbonara</Nom>
        <Ingredients>
          <Ingredient>
            <Nom>Oeufs</ Nom >
            <Quantite>2</ Quantite >
          </Ingredient>
          <Ingredient>
            <Nom>Lardons</ Nom >
            <Quantite>1</ Quantite >
          </Ingredient>
          <Ingredient>
            <Nom>Pates</ Nom >
            <Quantite>500</ Quantite >
          </Ingredient>
        </Ingredients>
        <difficulte>1</RequiredSkill>
      </Recette>
     
    </Recettes>
    Extrait du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    XDocument oDoc = XDocument.Load("Ressource/Recettes.xml");
                var myData = from info in oDoc.Descendants("Recettes").Descendants("Recette")
                             select new Recette
                             {
                                 Nom = Convert.ToString(info.Element("Nom").Value)
                                      //----------------------------------------------------------
                                      // C’est ici que je voudrai ajouter les ingrediens a la liste
                                      //----------------------------------------------------------
                             };
     
                oGrid = this.FindName("myDataGrid") as DataGrid;
                oGrid.ItemsSource = myData;

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Points : 674
    Points
    674
    Par défaut
    Je me pose la question de comment tu vas afficher les ingrédients? Je suppose qu'il peut y en avoir de 1 à n. Comment les représenteras-tu dans ta grid?

    Sinon, tu y es presque. Si tu ne maîtrises pas entièrement linq, pourquoi n'envisages-tu pas de faire une boucle?

    Pseudo code, non testé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    List<Recettes> list_recettes = new...
     
    foreach(var xmlrecette in oDoc.Descendants("Recettes").Descendants("Recette"))
    {
        recette = new Recette() { Nom = xmlrecette.Element("Nom").Value };
     
        //on cherche les enfants
        //recette.Ingredients =  .... xmlrecette.Decsendants() .... ou autre
     
     
     
        list_recetttes.Add(recette);
    }

  3. #3
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Citation Envoyé par petru2a Voir le message
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <Recettes>
     
      <Recette>
        <Nom>Pate a crepe</Nom>
        <Ingredients>
          <Ingredient>
            <Nom>Farine</ Nom >
            <Quantite>500</ Quantite >
          </Ingredient>
          <Ingredient>
            <Nom>Oeufs</ Nom >
            <Quantite>2</ Quantite >
          </Ingredient>
          <Ingredient>
            <Nom>Lait</ Nom >
            <Quantite>50</ Quantite >
          </Ingredient>
        </Ingredients>
        <difficulte>3</RequiredSkill>
      </Recette>
      <Recette>
        <Nom>Pates carbonara</Nom>
        <Ingredients>
          <Ingredient>
            <Nom>Oeufs</ Nom >
            <Quantite>2</ Quantite >
          </Ingredient>
          <Ingredient>
            <Nom>Lardons</ Nom >
            <Quantite>1</ Quantite >
          </Ingredient>
          <Ingredient>
            <Nom>Pates</ Nom >
            <Quantite>500</ Quantite >
          </Ingredient>
        </Ingredients>
        <difficulte>1</RequiredSkill>
      </Recette>
     
    </Recettes>
    Extrait du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    XDocument oDoc = XDocument.Load("Ressource/Recettes.xml");
                var myData = from info in oDoc.Descendants("Recettes").Descendants("Recette")
                             select new Recette
                             {
                                 Nom = Convert.ToString(info.Element("Nom").Value)
                                 Ingredients =                info.Descendants("Ingredients").Descendants("Ingredient")
                             };
                
                oGrid = this.FindName("myDataGrid") as DataGrid;
                oGrid.ItemsSource = myData;
    Quelque chose comme cela ?
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

Discussions similaires

  1. [AC-2003] problème liste deroulante avec inputbox
    Par makila64 dans le forum IHM
    Réponses: 2
    Dernier message: 28/03/2012, 08h31
  2. Réponses: 13
    Dernier message: 01/06/2007, 14h02
  3. Réponses: 17
    Dernier message: 03/05/2006, 14h01
  4. problème de pointeur avec les listes chainees
    Par innosang dans le forum C
    Réponses: 9
    Dernier message: 30/12/2005, 15h46
  5. [Problème] Accès aux propriétés de listes nommées avec []
    Par VincentL dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/10/2005, 16h13

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