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 :

Query Linq To XML [Débutant]


Sujet :

Linq

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Février 2015
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Février 2015
    Messages : 66
    Points : 63
    Points
    63
    Par défaut Query Linq To XML
    Bonjour,

    J'ai un fichier XML
    Code xaml : 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
    <?xml version="1.0" encoding="utf-8" ?>
    <Postes>
      <Ligne ID ="1" Nom="SAVD">
        <Poste ID ="1">
          <Nom>CFL_D 1</Nom>
        </Poste>
        <Poste ID ="2">
          <Nom>CFL_D 2</Nom>
        </Poste>
        <Poste ID ="3">
          <Nom>CFL_D 3</Nom>
        </Poste>
        <Poste ID ="4">
          <Nom>CFL_D 4</Nom>
        </Poste>
        <Poste ID ="5">
          <Nom>CFL_D 5</Nom>
        </Poste>
        <Poste ID ="6">
          <Nom>S&amp;G_D 1</Nom>
        </Poste>
        <Poste ID ="7">
          <Nom>S&amp;G_D 2</Nom>
        </Poste>
      </Ligne>
      <Ligne ID ="2" Nom="SAVG">
        <Poste ID ="1">
          <Nom>CFL_G 1</Nom>
        </Poste>
        <Poste ID ="2">
          <Nom>CFL_G 2</Nom>
        </Poste>
        <Poste ID ="3">
          <Nom>CFL_G 3</Nom>
        </Poste>
        <Poste ID ="4">
          <Nom>CFL_G 4</Nom>
        </Poste>
        <Poste ID ="5">
          <Nom>CFL_G 5</Nom>
        </Poste>
        <Poste ID ="6">
          <Nom>S&amp;G_G 1</Nom>
        </Poste>
        <Poste ID ="7">
          <Nom>S&amp;G_G 2</Nom>
        </Poste>
      </Ligne>
      <Ligne ID ="2" Nom="SAR">
        <Poste ID ="1">
          <Nom>PT 1</Nom>
        </Poste>
        <Poste ID ="2">
          <Nom>PT 2</Nom>
        </Poste>
        <Poste ID ="3">
          <Nom>PT 3</Nom>
        </Poste>
        <Poste ID ="4">
          <Nom>PT 4</Nom>
        </Poste>
        <Poste ID ="5">
          <Nom>Finition 1</Nom>
        </Poste>
        <Poste ID ="6">
          <Nom>Finition 2</Nom>
        </Poste>
        <Poste ID ="7">
          <Nom>Finition 3</Nom>
        </Poste>
      </Ligne>
    </Postes>

    Je cherche à récupérer les "Nom"(s) des "Poste"(s) en fonction de l'attribut de la "Ligne" sélectionné.

    En effectuant la requête suivante, j'arrive à isoler l'arborescence que je souhaite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public void findElementWithOtherElement()
            {
                xelement = XElement.Load(filePath);
     
                var query = from data in xelement.Elements()
                              where (string)data.Attribute("Nom").Value == "SAVD"
                              select data;
     
                foreach (var res in query)
                {
                    Console.WriteLine(res);              
                }
            }
    J'obtiens :
    Code xaml : 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
    <Ligne ID ="1" Nom="SAVD">
        <Poste ID ="1">
          <Nom>CFL_D 1</Nom>
        </Poste>
        <Poste ID ="2">
          <Nom>CFL_D 2</Nom>
        </Poste>
        <Poste ID ="3">
          <Nom>CFL_D 3</Nom>
        </Poste>
        <Poste ID ="4">
          <Nom>CFL_D 4</Nom>
        </Poste>
        <Poste ID ="5">
          <Nom>CFL_D 5</Nom>
        </Poste>
        <Poste ID ="6">
          <Nom>S&amp;G_D 1</Nom>
        </Poste>
        <Poste ID ="7">
          <Nom>S&amp;G_D 2</Nom>
        </Poste>
      </Ligne>

    Je n'arrive pas, à trouver la requête me permettant de lister chaque Nom de Poste.

    En effectuant un .Value, j'obtiens tous les Noms des Postes dans une seule variable (CFL_D 1CFL_D 2CFL_D 3CFL_D 4CFL_D 5S&G_D 1S&G_D 2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach (var res in query)
                {
                    Console.WriteLine(res.Value);              
                }
    Pourriez-vous me donner une indication sur la requête à exécuter afin de solder ce problème ?

    Je cherche à obtenir une liste de ce genre afin que je puisse la stocker terme à terme dans un tableau.
    CFL_D 1
    CFL_D 2
    CFL_D 3
    CFL_D 4
    CFL_D 5
    S&G_D 1
    S&G_D 2

    Je vous remercie d'avance.

  2. #2
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Février 2015
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Février 2015
    Messages : 66
    Points : 63
    Points
    63
    Par défaut
    La solution est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var query = from data in xelement.Descendants("Ligne")
                            where (string)data.Attribute("Nom").Value == "SAVD"
                            from data_2 in data.Descendants("Poste")
                            select data_2.Element("Nom").Value;
    Il est possible de combiner deux "requêtes" en incluant un second from.

  3. #3
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 065
    Points : 4 229
    Points
    4 229
    Par défaut
    Pourquoi ne pas plutôt deserialiser le fichier ca sera plus simple à traiter

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Février 2015
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Février 2015
    Messages : 66
    Points : 63
    Points
    63
    Par défaut
    Pourquoi ne pas plutôt deserialiser le fichier ca sera plus simple à traiter
    Je ne me suis pas penché sur la notion de sérialisation et désérialisation. (je vais tout de même étudier ce point)

    Ma stratégie est la suivante
    Mes bases de données sont gérées en .xml, mais elles risquent de passer sur un serveur distant assez rapidement.
    L'utilisation de LINQ me permet d'être au plus proche des requêtes SQL que j'aurai à adapter par la suite.

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

Discussions similaires

  1. [Linq To XML] Modifier l'objet, le xml ?
    Par Ticoche dans le forum Framework .NET
    Réponses: 13
    Dernier message: 28/04/2008, 11h12
  2. Réponses: 7
    Dernier message: 10/02/2008, 11h56
  3. Réponses: 1
    Dernier message: 30/05/2007, 20h12
  4. [Intermédiaire] C et le querying sur un XML
    Par peaceinpal dans le forum XML
    Réponses: 2
    Dernier message: 29/08/2006, 12h50
  5. Queries et flux xml
    Par johan_barbier dans le forum XMLRAD
    Réponses: 2
    Dernier message: 25/10/2005, 15h40

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