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 :

Ma requete XLinq ne retourne que le premier élément


Sujet :

Linq

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2009
    Messages : 133
    Points : 158
    Points
    158
    Par défaut Ma requete XLinq ne retourne que le premier élément
    Bonjour,

    J'ai créé cette classe

    Code : 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 TypeGen
        {
            public string Code { get; set; }
            public string Libelle { get; set; }
            public string PInc { get; set; }
     
            public TypeGen() { }
            public TypeGen(string code, string libelle, string pinc)
            {
                this.Code = code;
                this.Libelle = libelle;
                this.PInc = pinc;
            }
        }
    puis un fichier.XML avec XLinq de cette manière

    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
    XDocument doc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"),
                new XElement("TypesGeneriques",
     
                    new XElement("Prev151eSituation",
                    new XElement("param",
                        new XAttribute("code", "06"),
                        new XAttribute("libelle", "Divorcé(e)")),
                    new XElement("param",
                        new XAttribute("code", "07"),
                        new XAttribute("libelle", "Veuf(ve)"))),
     
                    new XElement("Prev151eNationalite",
                    new XElement("param",
                        new XAttribute("code", "06"),
                        new XAttribute("libelle", "francaise")),
                    new XElement("param",
                        new XAttribute("code", "07"),
                        new XAttribute("libelle", "allemande")))
                    )
                );
     
            string s = Server.MapPath("~/App_Data/TypesGeneriques.xml");
            doc.Save(s);
    Jusque là ce va ;
    et enfin j'essaye de lire le fichier en question

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    string s1 = Server.MapPath("~/App_Data/TypesGeneriques.xml");
     
            var query = from q in XElement.Load(s1).Elements("Prev151eNationalite")
                          select new TypeGen
                          {
                              Code = (string)q.Element("param").Attribute("code"),
                              Libelle = (string)q.Element("param").Attribute("libelle"),
                              PInc = String.Empty
                          };
     
            foreach (TypeGen elt in query)
            {
                LitMessage.Text += "<br/> code = " + elt.Code + " param : " + elt.Libelle;
            }
    Je voudrais retourner une list<T> contenant tous les param du noeud passé en paramètre. Mon problème est que je ne récupère que le premier param.
    Je sèche depuis deux jours et je vois plus très clair.
    Quelqu'un peut-il me donner un coup de main ?
    Merci

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2009
    Messages : 133
    Points : 158
    Points
    158
    Par défaut Parcourrir la liste des attributs d'un noeud Xml
    Finalement je me réponds à moi même, et pour ceux que cela pourrait intéresser.
    ici je créé bien le fichier test dont j'ai besoin :
    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
     
    XDocument doc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"),
                new XElement("TypesGeneriques",
     
                    new XElement("Prev151eSituation",
                    new XElement("param",
                        new XAttribute("code", "06"),
                        new XAttribute("libelle", "Divorcé(e)")),
                    new XElement("param",
                        new XAttribute("code", "07"),
                        new XAttribute("libelle", "Veuf(ve)"))),
     
                    new XElement("Prev151eNationalite",
                    new XElement("param",
                        new XAttribute("code", "06"),
                        new XAttribute("libelle", "francaise")),
                    new XElement("param",
                        new XAttribute("code", "07"),
                        new XAttribute("libelle", "allemande")),
                    new XElement("param",
                        new XAttribute("code", "08"),
                        new XAttribute("libelle", "suisse")))
                    )
                );
     
            string s = Server.MapPath("~/App_Data/testTypes04.xml");
            doc.Save(s);
    Et pour récupérer une collection des param d'un noeud, je fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    string s = Server.MapPath("~/App_Data/testTypes04.xml");
     
    var list = (from q in XElement.Load(s).Elements("Prev151eNationalite").Elements("param")
                           select new
                           {
                               Code = (string)q.Attribute("code"),
                               Libelle = (string)q.Attribute("libelle"),
                               PInc = String.Empty
                           }).OrderBy(a => a.Code).ToList();
    return list;
    Je récupère la collection dans une liste générique créée à la volée, ce qui simplifie le DataBinding à un DropDownList par exemple.
    L'erreur rencontrée était dû au mauvais positionnement du noeud 'param' (cf. code précédent).
    Amélioration possible :
    1. Au lieu de coder en dur le chemin et le fichier.Xml, on peut les récupérer du config.web
    2. passer tous les noeuds en paramètre à la procédure appelée.
    Voilà.
    nachtigal!

  3. #3
    Membre averti Avatar de roster
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 397
    Points : 426
    Points
    426
    Par défaut
    C'est très bien de penser à poster la solution à son problème, cela en aidera certainement plus d'un.

    Par contre, penses juste à passer ton sujet en , bouton en bas du topic. Merci.

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

Discussions similaires

  1. [RegEx] Mon regex ne retourne que le premier et dernier match
    Par Babas007 dans le forum Langage
    Réponses: 15
    Dernier message: 12/11/2013, 15h16
  2. Réponses: 1
    Dernier message: 14/01/2011, 18h52
  3. requete select ne retournant que les valeurs nom null
    Par monpseudonom dans le forum SQL
    Réponses: 1
    Dernier message: 23/02/2009, 15h11
  4. requete select ne retournant que les valeurs nom null
    Par monpseudonom dans le forum Sql Developer
    Réponses: 0
    Dernier message: 20/02/2009, 16h25
  5. select qui retourne que le premier element
    Par sallemel dans le forum Hibernate
    Réponses: 6
    Dernier message: 12/12/2008, 17h40

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