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 : récupération de noeuds spécifiques


Sujet :

Linq

  1. #1
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut Linq to XML : récupération de noeuds spécifiques
    Bonjour à tous,

    Je suis en train de reprendre un projet dans lequel je manipule un fichier XML que je dois requêter et mes souvenirs en la matière commençant à être lointains, je n'arrive pas à mes fins.

    Le fichier XML est structuré comme suit :
    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
    <communes>
       <commune>
          <region>BRETAGNE</region>
          <departement>35</departement>
          <designation_departement>ILLE ET VILAINE</designation_departement>
          <codepostal>35000</codepostal>
          <designation>RENNES</designation>
       </commune>
       <commune>
          <region>BRETAGNE</region>
          <departement>35</departement>
          <designation_departement>ILLE ET VILAINE</designation_departement>
          <codepostal>35300</codepostal>
          <designation>FOUGERES</designation>
       </commune>
       <commune>
          <region>BRETAGNE</region>
          <departement>56</departement>
          <designation_departement>MORBIHAN</designation_departement>
          <codepostal>56000</codepostal>
          <designation>VANNES</designation>
       </commune>
       <commune>
          <region>NORMANDIE</region>
          <departement>14</departement>
          <designation_departement>CALVADOS</designation_departement>
          <codepostal>14000</codepostal>
          <designation>CAEN</designation>
       </commune>
    </communes>
    Je cherche à récupérer une liste sans doublons des "département" de la région "BRETAGNE".

    J'ai essayé quelques requêtes du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var départements = (from département in xelement.Elements("commune").Elements("département")
                            where département.Elements("region").ToString().Equals("BRETAGNE")
                            select département).GroupBy(x => x.Value).Select(x => x.First());
    mais la liste retournée est vide.

    Où est-ce que je me trompe ?

    D'avance merci pour votre aide.

  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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Tu cherches "département" avec un accent, alors qu'il n'y en a pas dans le XML

    Avec ce code ça marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	var doc = XDocument.Load(path);
    	var query =
    		from commune in doc.Root.Elements("commune")
    		where commune.Element("region").Value == "BRETAGNE"
    		select commune.Element("designation_departement").Value;
    	var departments = query.Distinct().ToList();
    	departments.Dump();

  3. #3
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Tu cherches "département" avec un accent, alors qu'il n'y en a pas dans le XML
    Copier/coller qui a mal tourné

    J'avais finalement réussi avec un code un peu différent mais qui revenait au même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var query = (from commune in xelement.Elements("commune")
                            where (string)commune.Element("region") == secteur
                            select commune.Element("designation_departement")).GroupBy(x => x.Value).Select(x => x.First());
    Merci pour le coup de main.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/11/2012, 12h30
  2. [Linq] to XML : Liste d'élément d'un noeud ?
    Par Ticoche dans le forum C#
    Réponses: 4
    Dernier message: 17/09/2008, 16h14
  3. Réponses: 2
    Dernier message: 06/08/2008, 10h24
  4. Récupération des noeuds XML :'(
    Par le_chomeur dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/01/2008, 19h15
  5. [XML]Récupération d'un noeud via son id
    Par zegone dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 17/02/2006, 15h38

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