Menu

Lecture fichier XML [Résolu]

Messages postés
42
Date d'inscription
jeudi 7 février 2019
Statut
Membre
Dernière intervention
22 mars 2019
- - Dernière réponse : Whismeril
Messages postés
13301
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
24 mai 2019
- 24 févr. 2019 à 20:49
Bonjour à tous , et bien sur à Whismeril, comme dit l'autre tant que je gagne je joue ...

J'ai transposé l'exemple du carnet de contacts, certes beaucoup par mimétisme, à mon besoin et je comprends de mieux en mieux
J' ai opté pour le format XML tant qu'à faire , voir ci-dessous, simple pour les testes
<CarnetVuesReseau>
<VueReseau NomVue="Gare secrète 1" Largeur="1000" Hauteur="1001">
<Aiguillages>
 <Aiguillage num="001" type="droite" posX="1010"/>
 <Aiguillage num="002" type="droite" posX="1020"/>
 <Aiguillage num="003" type="gauche" posX="1030"/>
 <Aiguillage num="004" type="droite" posX="1040"/>
 </Aiguillages>
 </VueReseau>
<VueReseau NomVue="Tranbordeur" Largeur="900" Hauteur="901">
<Aiguillages>
 <Aiguillage num="001" type="droite" posX="910"/>
 <Aiguillage num="002" type="droite" posX="920"/>
 </Aiguillages>
 </VueReseau>
<VueReseau NomVue="Gare Metz" Largeur="800" Hauteur="801">
<Aiguillages>
 <Aiguillage num="001" type="droite" posX="810"/>
 <Aiguillage num="002" type="droite" posX="820"/>
 </Aiguillages>
 </VueReseau>
 </CarnetVuesReseau>



cela fonctionne à l'identique mais quand j'essaie avec trois attributs pour Aiguillage ( Telephone dans ton exemple) je n'y arrive pas
j'ai quelques incompréhensions la première sur
        /// <summary>
        /// Collection de numéros de téléphone
        /// </summary>
        /// <remarks>le type KeyValuePair est le type de base d'un dictionnaire, il associe une clé à une valeur, là je m'en sert pour dire si le numéro est le domicile, le bureau etc...</remarks>
        public ObservableCollection<KeyValuePair<string, string>> Telephones { get; set; }


je suppose que cette clé doit permettre des tris ou autres par la suite ...

mais ici je ne comprends pas l'association de t.key avec "Numero" puisque c'est Type qui contient Domicile ....


                    new XElement("CarnetDeContacts",
                    from c in Contacts
                    select new XElement("Contact", new XAttribute("Nom", c.Nom), new XAttribute("Prenom", c.Prenom), new XAttribute("Naissance", c.Naissance),
                                new XElement("Notes", c.Notes),
                                new XElement("Telephones",
                                    from t in c.Telephones
                                    select new XElement("Telephone", new XAttribute("Numero", t.Key), new XAttribute("Type", t.Value))),



j'ai bien cherché à remplacer KeyValuePair par IEnumerable mais sans succès je m'en remet une nouvelle fois à tes compétences




Configuration: Windows / Chrome 72.0.3626.109
Afficher la suite 

Votre réponse

1 réponse

Messages postés
13301
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
24 mai 2019
341
0
Merci
Je me suis servi de KeyValuePair, car il permet d’associer 2 données.
Si tu utilisais le type Dictionnary en VBA c’est la même chose.
Ce type est composé d’une clé (unique dans un dictionnaire) et d’une valeur.

J’ai utilisé LinqToXml pour la serialisation, un des avantages (par rapport à d’autres méthodes) est de pouvoir avoir des noms différents entre les classes et le fichier xml. Dans ce cas Key correspond à l’attribut Numero et Value correspond à Type.

Mais KeyValuePair n’est pas adapté à ton besoin, car Key est en lecture seule, et tu parles d’avoir 3 valeurs. Il te faudra écrire une classe dédiée.

Ce que j’aurais dû faire aussi, j’ai voulu gagner un peu de temps et je t’ai embrouillé.

J’ai écrit un tuto pour linqToXml https://codes-sources.commentcamarche.net/faq/11196-linq-to-xml-c-et-vb-net

A l’époque, mes applications traitant peu de données (quelques millers), j’avais l’habitute d’écrire la serialisation dans la classe.
C’est contraire à ce que je t’ai conseillé récemment, regarde la syntaxe, c’est ce qui compte.
Commenter la réponse de Whismeril