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 :

[LINQ TO XML][C#] NullReference


Sujet :

Linq

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2003
    Messages : 171
    Par défaut [LINQ TO XML][C#] NullReference
    Bonjour

    j'aurai besoin d'un coup de main voici mon code
    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
     
     public class ProfilTFS
        {
            public String Name { get; set; }
            public String Code { get; set; }
            public String Description { get; set; }
            public List<DroitTFS> Droits { get; set; }
     
        }
        public class DroitTFS
        {
            public String Name { get; set; }
            public String Group { get; set; }
            public String Role { get; set; }
        }
    }
     
    var profils = (from profil in xmlproc.Descendants("Profil")
                           where (profil.IsEmpty == false)  
                           select new ProfilTFS
                                {
                                    Name = profil.Attribute("Name").Value.ToString(),
                                    Code = profil.Attribute("Code").Value.ToString(),
                                    Description = profil.Attribute("Description").Value.ToString(),
                                    Droits = (
                                                from droit in profil.Elements("Droit")
                                                where ( droit.IsEmpty == false)
                                                select new DroitTFS
                                                  {
                                                      Name = droit.Attribute("Name").Value.ToString(),
                                                      Group = droit.Attribute("Group").Value.ToString(),
                                                      Role = droit.Attribute("Role").Value.ToString()
                                                  }
                                                  ).ToList<DroitTFS>()                        
                                }
                                );

    il me sert à lire le fichier Xml suivant
    Code XML : 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
    <?xml version="1.0" standalone="yes" ?>
    <root>
       <Profils>
        <Profil Name="EveryOne" Code="EVO">
          <Droit Name="SharePoint" Group="Visiteur du portail" />
          <Droit Name="Reporting Services" Role="Browser" />
        </Profil>
        <Profil Name="Chef de Projet" Code="CDP" Description="Groupe contenant tous les chefs de projets du projet.">
          <Droit Name="SharePoint" Group="Membres du portail" />
          <Droit Name="Reporting Services" Role="Browser,Publisher" />
        </Profil>
        <Profil Name="Testeurs" Code="TST" Description="Groupe contenant tous les testeurs du projet.">
          <Droit Name="SharePoint" Group="Membres du portail" />
          <Droit Name="Reporting Services" Role="Browser,Publisher" />
        </Profil>
        <Profil Name="Release Manager" Code="RM" Description="Groupe contenant tous les release manager du projet.">
          <Droit Name="SharePoint" Group="Membres du portail" />
          <Droit Name="Reporting Services" Role="Browser,Publisher" />
        </Profil>
      </Profils>
    </root>

    Malheureusement j'obtiens le message d'erreur suivant
    {"La référence d'objet n'est pas définie à une instance d'un objet."}

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    profil.Attribute("Description").Value
    Certains de tes profils n'ont pas de description, donc .Attribute("Description") renvoie null, donc .Value lève une exception...

    Le plus simple c'est de remplacer ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    profil.Attribute("Description").Value.ToString()
    Par ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (string)profil.Attribute("Description")
    XAttribute et XElement définissent des conversions explicites pour la plupart des types primitifs (int, string...)

    Si l'attribut n'existe pas, ça renverra simplement null

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2003
    Messages : 171
    Par défaut
    Merci cela a resolu une partie de mon probleme mais les droits associés aux profils ne remontent pas
    donc apres modification j'ai ceci :
    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
       var profils = (from profil in xmlproc.Descendants("Profil")
                               where (profil.IsEmpty == false)
                               select new ProfilTFS
                               {
                                   Name = (String)profil.Attribute("Name"),
                                   Code = (String)profil.Attribute("Code"),
                                   Description = (String)profil.Attribute("Description"),
                                   Droits = (
                                               from droit in profil.Descendants("Droit")
                                               where (droit.IsEmpty == false)
                                               select new DroitTFS
                                               {
                                                   Name = (String)droit.Attribute("Name"),
                                                   Group = (String)droit.Attribute("Group"),
                                                   Role = (String)droit.Attribute("Role")
                                               }
                                                 ).ToList<DroitTFS>()
                               }
                                 );
    et je comprends pas pourquoi

    j'ai essayé en changeant profil.Elements("Droit") en profil.Descendants("Droit") même résultat

    Une idée ?

  4. #4
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Le problème vient de where (droit.IsEmpty == false) En effet la propriété IsEmpty renvoie true puisque l'élément Droit ne contient rien. Les attributs ne sont pas pris en compte à ce niveau. Retire ce test et ça ira mieux je pense

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2003
    Messages : 171
    Par défaut
    Merci pour l'info et oui ce n 'est pas nécessaire merci à vous 2
    Bonne journée a tous

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

Discussions similaires

  1. [Linq to Xml] Probleme de requete
    Par Gregory.M dans le forum Linq
    Réponses: 6
    Dernier message: 27/05/2008, 08h54
  2. [LINQ to XML] Connexion à un fichier xml
    Par Gregory.M dans le forum Linq
    Réponses: 5
    Dernier message: 25/05/2008, 11h32
  3. [Linq To XML] Modifier l'objet, le xml ?
    Par Ticoche dans le forum Framework .NET
    Réponses: 13
    Dernier message: 28/04/2008, 11h12
  4. Réponses: 7
    Dernier message: 10/02/2008, 11h56
  5. Réponses: 1
    Dernier message: 30/05/2007, 20h12

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