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 :

Problème de Linq et XML


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 64
    Points : 44
    Points
    44
    Par défaut Problème de Linq et XML
    Bonjour,

    J'ai deux fichiers XML, <Universités> et <Académie>, la structure de <Universités> est
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <Universite>
    		<Academie>ACAU01</Academie>
    		<Code>UNIVP1</Code>
    		<Nom>Université Paris 1 Panthéon-Sorbonne</Nom>
    		<Adresse>Centre Michelet. 3, rue Michelet 75006 Paris</Adresse>
    		<SiteInternet>http://www.univ-paris1.fr</SiteInternet>
    		<NomPresident>XXXXXXXX</NomPresident>
    		<Telephone>0000000000</Telephone>
    	</Universite>
    dans le code C#, j'ai utilisé Linq pour récupérer ces données et insérer dans une liste. En plus, j'ai deux classes qui sont nommées université et académie.
    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
     
                    string nom = elt.Element("Nom").Value;
                    string adresse = elt.Element("Adresse").Value;
                    string siteInternet = elt.Element("SiteInternet").Value;
                    string nomPresident = elt.Element("NomPresident").Value;
                    string academie = elt.Element("Academie").Value;
     
                    Universite uni = new Universite();
     
                    uni.Nom = nom;
                    uni.Adresse = adresse;
                    uni.SiteInternet = siteInternet;
                    uni.NomPresident = nomPresident;
                    //uni.Academie = academie;
     
                    if (!(elt.Element("Telephone").Value.Equals(string.Empty)))
                    {
                        long tel = long.Parse(elt.Element("Telephone").Value);
                        uni.Telephone = tel;
                    }               
     
                    maListeUniversite.Add(uni);
                }
    Pour la ligne de code en commentaire, comment je peux faire une transtypage(cast) pour ajouter cet attribut?

    meci bp

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Si j'ai bien compris ton membre "academie" de la classe université est de type "Academie", une classe que tu as créée, c'est bien ça?

    Si c'est bien le cas alors il ne faut pas passer par du transtypage mais plutôt par un constructeur de "Academie" qui a comme constructeur une chaîne de caractères.

    Après, il faudrait que tu nous en dises plus sur cette classe "Academie"...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 64
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par Ph_Gr Voir le message
    Bonjour,
    Si j'ai bien compris ton membre "academie" de la classe université est de type "Academie", une classe que tu as créée, c'est bien ça?

    Si c'est bien le cas alors il ne faut pas passer par du transtypage mais plutôt par un constructeur de "Academie" qui a comme constructeur une chaîne de caractères.

    Après, il faudrait que tu nous en dises plus sur cette classe "Academie"...
    Académie est une classe avec ces attributs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            private string adresseSiege;
            private string adresseInternet;
            private string adresseEmail;
            private long telephone;
            private long fax;
    il n'existe que des getter/setter, il n'y pas de constructeur.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Si c'est toi qui as fait la classe "Academy" et que tu n'as pas défini de constructeur, il faut savoir alors que le compilateur génère automatiquement un constructeur publique sans paramètres.

    Mais je n'arrive pas très bien à comprendre: tu récupères une chaîne de caractères "Academy" de ton fichier XML et tu veux faire un transtypage en "Academy"... Mais comment dans ce cas pensais-tu que tes membres de la classe "Academy" allaient se remplir? Si tu ne lui spécifies pas comment, ça ne risque pas de se remplir, c'est surtout cela qu'il faut m'expliquer...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 64
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par Ph_Gr Voir le message
    Si c'est toi qui as fait la classe "Academy" et que tu n'as pas défini de constructeur, il faut savoir alors que le compilateur génère automatiquement un constructeur publique sans paramètres.

    Mais je n'arrive pas très bien à comprendre: tu récupères une chaîne de caractères "Academy" de ton fichier XML et tu veux faire un transtypage en "Academy"... Mais comment dans ce cas pensais-tu que tes membres de la classe "Academy" allaient se remplir? Si tu ne lui spécifies pas comment, ça ne risque pas de se remplir, c'est surtout cela qu'il faut m'expliquer...
    la classe "Academy" est donnée par le prof, dans la classe, il n'a pas ajouté un constructeur...la difficulté est juste convertir une chaîne de caractère en type "Academy", je n'arrive pas à faire ce transtypage...les autres attributs sont en type primitif, il n'existe pas de problème de conversion.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bon, j'ai dû mal m'exprimer et j'en m'en excuse, je vais essayer d'être plus clair alors...

    Citation Envoyé par ivoratparis Voir le message
    la classe "Academy" est donnée par le prof, dans la classe, il n'a pas ajouté un constructeur...
    En .NET, une classe a toujours un constructeur. Si tu n'en vois pas un déclaré, alors par défaut c'est un constructeur publique sans paramètres.

    Citation Envoyé par ivoratparis Voir le message
    la difficulté est juste convertir une chaîne de caractère en type "Academy", je n'arrive pas à faire ce transtypage...les autres attributs sont en type primitif, il n'existe pas de problème de conversion.
    Si la classe "Academy" ne dispose pas d'un opérateur de transtypage (explicite ou implicite) alors il n'est pas possible d'effectuer ce transtypage.

    Mais dans tous les cas, tu ne réponds pas à ma question : que devrait faire le transtypage d'une chaîne de caractères en "Academy"? C'est à dire, comment les membres de "Academy" sont-ils sensés se remplir?

  7. #7
    Membre confirmé Avatar de Jabbal'H
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2004
    Messages : 403
    Points : 580
    Points
    580
    Par défaut
    Et la valeur là "ACAU01"
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <Academie>ACAU01</Academie>
    A quoi correspond elle dans les propriétés suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private string adresseSiege;
    private string adresseInternet;
    private string adresseEmail;
    private long telephone;
    private long fax;
    Il doit manquer un nom ^^


    Je pense qu'il te manque quelques notions, ton fichier XML doit être une représentation sous forme XML de ton objet
    Par exemple pour "convertir" le noeud XML Academie en objet Academie au sens c#
    Ton fichier XML devrait plutot ressembler à çà

    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
    <Universite>
    <Academie>
    <adresseSiege>L'adresse du siege</adresseSiege>
    <adresseInternet>L'adresse internet</adresseInternet>
    <adresseEmail>L'email</adresseEmail>
    <telephone>le tel</telephone>
    <fax></fax>
    </Academie>
    <Code>UNIVP1</Code>
    <Nom>Université Paris 1 Panthéon-Sorbonne</Nom>
    <Adresse>Centre Michelet. 3, rue Michelet 75006 Paris</Adresse>
    <SiteInternet>http://www.univ-paris1.fr</SiteInternet>
    <NomPresident>XXXXXXXX</NomPresident>
    <Telephone>0000000000</Telephone>
    </Universite>


    A partir de là, tu devra écrire une fonction qui construira ton objet Academie
    Exemple
    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
    private Academie ToAcademie(XElement element)
    {
    var result = new Academie();
    result.AdresseSiege = element.Element("adresseSiege");
    // etc ...
    return result;
    } 
     
    // ou mieux une méthode d'extension
    private static Academie ToAcademie(this XElement element)
    {
    var result = new Academie();
    result.AdresseSiege = element.Element("adresseSiege");
    // etc ...
    return result;
    }
     
    // Et l'appels
    uni.Academie = elt.Element("Academie").ToAcademie();
    // Ou
    uni.Academie = ToAcademie(elt.Element("Academie"));

    Je n'ai pas trop vérifié la syntaxe ou la compile, mais çà ne doit pas être loin d'être bon.



    PS : Ph_Gr je te trouvais clair

Discussions similaires

  1. [XSLT][OpenOffice] Problème filtre d'export XML
    Par Maximil ian dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 04/06/2011, 20h10
  2. linq to xml - problème pour mathml
    Par PatrickDescamps dans le forum C#
    Réponses: 4
    Dernier message: 16/12/2008, 19h09
  3. Réponses: 7
    Dernier message: 10/02/2008, 11h56
  4. [FLASH MX2004] Problème avec un datagrid & xml
    Par cedonline dans le forum Flash
    Réponses: 72
    Dernier message: 15/11/2005, 15h21
  5. Problème avec le parser XML
    Par sheura dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 09/11/2005, 18h26

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