Lecture fichier XML

Résolu/Fermé
robunccm Messages postés 52 Date d'inscription jeudi 7 février 2019 Statut Membre Dernière intervention 9 mars 2024 - 24 févr. 2019 à 19:16
 Utilisateur anonyme - 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
A voir également:

1 réponse

Utilisateur anonyme
24 févr. 2019 à 20:49
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.
0