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 :

Linq + XML; je suis un peu perdu [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 464
    Par défaut Linq + XML; je suis un peu perdu
    Salut !

    Je débute tout juste avec Linq et XML et j'ai un petit souci :

    Voici classe sur laquelle je travaille :

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    public class Extrait
        {
            private String _Artiste;
            private String _Titre;
            private double _PointA;
            private double _PointT;
            private double _PointAT;
            private List<String> _JoueurA;
            private List<String> _JoueurT;
            private List<String> _JoueurAT;
     
            public String Artiste
            {
                get { return _Artiste; }
                set { _Artiste = value; }
            }
     
            public String Titre
            {
                get { return _Titre; }
                set { _Titre = value; }
            }
     
            public Double PointA
            {
                get { return _PointA; }
                set { _PointA = value; }
            }
     
            public Double PointT
            {
                get { return _PointT; }
                set { _PointT = value; }
            }
     
            public Double PointAT
            {
                get { return _PointAT; }
                set { _PointAT = value; }
            }
     
            public List<String> JoueurA
            {
                get { return _JoueurA; }
                set { _JoueurA = value; }
            }
     
            public List<String> JoueurT
            {
                get { return _JoueurT; }
                set { _JoueurT = value; }
            }
     
            public List<String> JoueurAT
            {
                get { return _JoueurAT; }
                set { _JoueurAT = value; }
            }
     
            public Extrait(String Artiste, String Titre, Double PointA, Double PointT, Double PointAT, List<String> JoueurA, List<String> JoueurT, List<String> JoueurAT)
            {
                _Artiste = Artiste;
                _Titre = Titre;
                _PointA = PointA;
                _PointT = PointT;
                _PointAT = PointAT;
                _JoueurA = JoueurA;
                _JoueurT = JoueurT;
                _JoueurAT = JoueurAT;
            }
        }
    Dans ma form, est déclaré ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public partial class Form1 : Form
        {        
            private Extrait[] extraits;
            ...
    Voici le début de ma méthode pour sérialiser :

    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
    private void button3_Click(object sender, EventArgs e)
            {
                XDocument xDoc = new XDocument(                    
                            new XElement("blind",
                            new XElement("nombre_titres", nbextrait),
                            new XElement("numero", textBox1.Text),
                            new XElement("theme", textBox4.Text),
                            new XElement ("mdp",textBox2.Text),
                            new XElement("lien",textBox5.Text),
                            new XElement ("playlist",
                            from ex in extraits
                            select new XElement("extrait",
                            new XElement("artiste",ex.Artiste),
                            new XElement("titre",ex.Titre),
                            new XElement("blindeur_tout",ex.JoueurAT[0]),
                            new XElement("blindeur_artiste", ex.JoueurA[0]),
                            new XElement("blindeur_titre", ex.JoueurT[0])
                            )
                            )
                            )                       
                            );
                xDoc.Save(_folder + "Blind.xml");
            }
    Je souhaite à présent accéder au contenu des list JoueurAT, JoueurA et JoueurT; comme vous le voyez ci-dessus, j'ai déjà accédé à l'indice 0 de l'élément. Maintenant, je voudrais la liste complète des indices supérieurs à zéro, s'ils existent.
    Mais voilà, je ne vois pas du tout comment faire ...

    Merci de votre aide !

  2. #2
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Tu parles de Link et et de Serialization or tu construis ton xml à l'aide de la classe XDocument (ce n'est pas de la serialization) et il n'y a pas de Link

    La Serialization requiert la décoration de tes classes et de tes propriétés avec l'attribut "Serlializable" (Les champs ne sont pas décorables). Pour plus d'informations j'ai déjà traité ce type de sujet ici :

    https://www.developpez.net/forums/d1...alisation-xml/
    https://www.developpez.net/forums/d1...l/#post8797998

    PS1 : Bon d'acord c'est en VbNet mais le principe est identique.
    PS2 : Attention les champs ne sont pas Serializable il faut donc les décorer avec l'attribut "XmlIgnore".

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 464
    Par défaut
    Merci pour ton post ! Comme je disais, j'en touche pas une en XML, donc...

    En fait, je vais poser ma question autrement : est-il obligatoire de passer par la sérialisation pour sauvegarder les données de mon appli ? Peut-on remplir un fichier XML avec ces données sans passer par la sérialisation ?

    J'ai l'impression que je parle de sérialisation alors qu'en fait, je fais tout autre chose...

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    Citation Envoyé par wallace1 Voir le message
    Tu parles de Link et et de Serialization or tu construis ton xml à l'aide de la classe XDocument (ce n'est pas de la serialization) et il n'y a pas de Link
    même en passant par xdocument c'est de la sérialisation (manuelle), et perso je vois du linq dans son code
    et l'attribut serializable est surtout utilisé par le sérialiseur binaire, le xml n'en a pas besoin à priori

    la sérialisation consiste à transformer un objet en un tampon mémoire (octets/xml/json ...) de sorte qu'il puisse être reconstruit par le processus inverse
    ca peut alors être stocké sur un disque dur, envoyé par un web service …
    il existe des sérialiseurs (y compris dans le Framework) qui se débrouille pour savoir quoi sérialiser et comment, ce qui permet de sérialiser en 2 lignes de code (xmlserializer, binaryformatter, datacontractserializer …)
    le faire à la main (xdocument ou autre) est général utilisé quand une sérialisation automatique peut poser problème ou qu'on veut différer du système prévu

    après pour sauvegarder des choses sur le disque il y a les bases de données, mais pour peu de choses qui ne changent pas beaucoup la sérialisation est souvent appréciée car comme dit précédemment ca se fait en 2 lignes de code


    xmlserializer sérialise les propriétés public, il faut que les getters et setters soient public aussi, il est possible d'utiliser xmlignore pour dire qu'une propriété n'est pas enregistrée
    binaryformatter sérialise les fields (variables) même privés,il faut qu'il y ait l'attribut serializable au dessus de chaque classe à sérializer et chaque contenu dans l'arbre (si tu as des propriétés qui sont des classes il leur faut l'attribut)
    datacontractserializer est utilisé par défaut par WCF et lui il requiert l'attribut DataContract au dessus de chaque classe et DataMember au dessus de chaque propriété à sérialiser

    chacun a ses avantages et inconvénients
    binaryformatter est performant et la sérialisation ne prend pas trop de place (un byte continuera de prendre un octet alors qu'en xml 255 prend 3 octets par exemple vu qu'il est écrit (en utf8 souvent), sans parler des balises xml)
    il n'est compatible qu'avec .net alors que l'xml est interopérable
    etc...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    @Pol63 :

    Bon mea culpa pour le link je ne l avais pas vu .... (ça valait bien 1 doigt......)
    Sinon moi perso je ne vois pas l intérêt d'utiliser une autre instance d'objet de type Xdocument alors qu'une classe (extrait) aussi simplement structurée peut facilement être gérée avec du xmlserializer et deserializer !
    Au passage la construction xml manuelle d'OP n est pas très cohérente ..... les valeurs blind, thème...etc... ne devraient elles pas faire partie d une classe ....o_O....
    Oui tu peux dire que la construction d un fichier plat à partir de la classe Xdocument correspond a une sorte de "serialization" mais l intérêt reste tout de même de récupérer le type "extrait" et pas un type Xdocument qu on transforme de nouveau en extrait !

    Je suis ouvert au dialogue et je trouve que voter rouge n apporte rien de constructif.

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    ca faisait longtemps ^^ (les gens n'aiment pas que je leur mette des pouces rouges)

    les pouces verts et rouges sont sur les messages, pas sur les gens, donc ce n'est pas toi que je vise (par ailleurs tes réponses sont souvent utiles sur le forum)
    nous sommes sur un forum ou tout le monde peut poser une question et tout le monde peut y répondre, donc pour moi ces pouces servent à évaluer la qualité d'une réponse, ce qui peut aider aussi le posteur de départ quant à sa question
    si quelqu'un dit une connerie et qu'il y a 5 pouces rouges ca aide à se dire que cette réponse est peut être à oublier, ou du moins à vérifier car elle n'a pas l'air de plaire à la communauté
    c'est aussi valable pour les gens qui tombent là en venant d'un moteur de recherche, lire en diagonale en évitant les posts mal noté c'est souvent utile
    le pouce rouge peut donc servir aux lecteurs, et à celui qui a posté pour qu'il puisse se poser des questions, que ca soit constructif n'est pas un adjectif pertinent ici
    et sinon à quoi sert le pouce rouge ?

    quand on regarde ton message les infos qu'on y trouve sont :
    - utiliser xdocument ce n'est pas de la sérialisation
    - l'attribut serializable est nécessaire
    (et accessoirement "je ne vois pas de link")
    malheuresement toutes ces affirmations me semble fausses, et link c'est dans zelda
    donc mon pouce rouge me semble tout à faire approprié, je ne vois pas pourquoi je le retirerais
    après oui j'ai pas regardé tes liens, ils sont peut etre utiles
    de plus quant à être ouvert à la discussion, je t'ai cité et t'ai répondu pourquoi c'était faux, ca me semble assez constructif

    pour la sérialisation je viens de vérifier, wikipedia précise que c'est découper un truc en plein de petits trucs pour le stocker ou l'envoyer, en ce sens ca a l'air de rejoindre ce que je dis
    de plus la classe xmlserializer que fait elle à part écrire les propriétés chacune leur tour avec l'ancetre de xdocument ? donc c'est bien pareil...
    quant à serializable j'ai déjà fait de la sérialisation xml sans l'utiliser alors que le binaryformatter plante quand on ne le met pas

    bref je pense qu'il vaut mieux accepter ses erreurs, ca m'arrive aussi de prendre des pouces rouges justifiés, c'est pas bien grave, le forum vaut plus que ceux qui le compose
    sinon concernant le problème ici, je suis d'accord avec toi que ca ne sert à rien de s'embêter avec xdocument alors qu'une classe (voire plusieurs) peuvent faire ce qu'il cherche bien plus simplement, je l'ai dit aussi, on s'embête que quand on a pas le choix, ca peut arriver, mais pour ca aussi il y a des attributs et des interfaces à implémenter qui permettent de modifier le comportement du sérialiseur
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bah j aimais bien Zelda moi.....
    Pas grave pour le rouge..c juste que ça faisait longtemps qu' on ne m en avait pas mis. Mais ne t inquiète pas je saisis la philosophie de la pertinence aussi je ne croyais pas être autant à coté de la plaque d ou ma réponse.

    Allez fin du hors sujet pour m part et je laisse OP s en depatouiller

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

Discussions similaires

  1. React.js - Je suis un peu perdu
    Par Hadock dans le forum React
    Réponses: 2
    Dernier message: 20/03/2019, 00h00
  2. HTML, XHTML, HTML5: je suis un peu perdu!
    Par laloune dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 01/12/2012, 19h51
  3. robocopy je suis un peu perdu
    Par simipi dans le forum Windows Vista
    Réponses: 10
    Dernier message: 09/12/2009, 09h08
  4. Que faut-il pour commencer? (je suis un peu perdu)
    Par Fredczj dans le forum Débuter
    Réponses: 2
    Dernier message: 01/09/2008, 08h46
  5. Réponses: 5
    Dernier message: 13/06/2005, 17h59

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