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 :

récupérer des éléments enfants.


Sujet :

Linq

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 104
    Par défaut récupérer des éléments enfants.
    Bonsoir,

    j'ai quelques problèmes pour récupérer des éléments en utilisant une requête avec Linq to XML

    tout d'abord mon XML :

    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
     
    <?xml version="1.0"?>
    <configuration>
     
    	<!-- configuration de l'objet carte -->
    	<map initialExtent="-122.2 24.89 -70.59 46.92" fullExtent="-150 -50 150 50">
     
    		<!-- couches en cache -->
    		<layer id="Street_layer" type="Tiled" label="Couche rue" visible="true" alpha="1" ordre="1" url="http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer"/>
    		<layer id="physical_layer" type="Tiled" label="Couche topographique" visible="true" alpha="1" ordre="2" url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Physical_Map/MapServer"/>
        <layer id="imagery_layer" type="Tiled" label="Couche vue satellite" visible="true" alpha="1" ordre="3" url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer"/>
     
        <!-- couches dynamiques -->
    		<layer id="world_population_layer" type="Dynamic" label="Couche population mondiale" visible="true" alpha="1" ordre="4" url="http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Population_World/MapServer"/>
    		<layer id="USA_census_layer" type="Dynamic" label="Couche recensement américain" visible="false" alpha="1" ordre="5" url="http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer"/>
     
    	</map>
     
     
      <!-- configuration des widgets -->
      <widgets>
     
      </widgets>
     
    </configuration>
    et je souhaite récupérer tous les éléments de type "layer"
    Or la seule méthode que j'ai trouvé c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    var queryTiles = from layer in configuration.Descendants("map").Elements("layer")
                                     where ((string)layer.Attribute("type")).Contains("Tiled")
                                     orderby (string)layer.Attribute("ordre") descending
                                     select new
                                     {
                                         id = (string)layer.Attribute("id"),
                                         label = (string)layer.Attribute("label"),
                                         visible = (Boolean)layer.Attribute("visible"),
                                         alpha = (float)layer.Attribute("alpha"),
                                         url = (string)layer.Attribute("url")
                                     };
    et je trouve que la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    from layer in configuration.Descendants("map").Elements("layer")
    est franchement pas top. L'idéal je pense dans mon cas serait de pouvoir récupérer tous les éléments de nom "layer" sans avoir à passer par la structure même du XML

    j'ai bien tenté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from layer in configuration.Elements("layer")
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from layer in configuration.Descendants("layer")
    et j'obtiens rien.
    une idée de comment on peut faire ça ?

    merci d'avance !
    Skerdreux.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 104
    Par défaut
    J'ai encore regardé et je ne trouve toujours pas.

    est ce que je me trompe ou il n'est pas possible de récupérer tous les éléments dont la balise se nome "XXXX" ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2004
    Messages : 166
    Par défaut
    Regarde du coté du namespace System.Xml.XPath
    Ça pourrait t'aider et tu devrais pouvoir faire des requêtes du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    var query = from layerin configuration.XPathSelectElements("//layer")
                    where layer.Attribute("type").Value.Contains("Tiled")
                    orderby layer.Attribute("type").Value descending
                    select new
                                     {
                                         id = layer.Attribute("id").Value,
                                         label = layer.Attribute("label").Value,
                                         visible = (Boolean)layer.Attribute("visible").Value,
                                         alpha = (float)layer.Attribute("alpha").Value,
                                         url = layer.Attribute("url").Value
                                     };

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2004
    Messages : 166
    Par défaut
    Tu peux aller encore plus loin avec les requêtes XPath en incluant ta clause where dans la requête XPath:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    var query = from layer in configuration.XPathSelectElements("//layer[contains(@type, 'Tiled')]")
                    orderby layer.Attribute("type").Value descending
                    select new
                                     {
                                         id = layer.Attribute("id").Value,
                                         label = layer.Attribute("label").Value,
                                         visible = (Boolean)layer.Attribute("visible").Value,
                                         alpha = (float)layer.Attribute("alpha").Value,
                                         url = layer.Attribute("url").Value
                                     };

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 104
    Par défaut
    Merci beaucoup !
    je ne savais pas qu'on pouvait utiliser les deux en même temps.

    Par contre au niveau du :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using System.Xml.XPath;
    il m'envoie sympathiquement balader (référence d'assembly manquante). J'ai regardé pour l'ajouter et j'ai aucune référence à cette assembly.

    j'ai regardé sur internet pour voir si il fallait installer quelque chose en plus mais j'ai rien trouvé. c'est normal ? (enfin non je ne pense pas)

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2004
    Messages : 166
    Par défaut
    De rien!

    Pour la dll à référencer c'est celle la: System.Xml.Linq.dll (Framework 3.5)

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/11/2012, 13h47
  2. Réponses: 1
    Dernier message: 05/03/2010, 13h30
  3. Disposition dynamique des éléments enfants dans un StackPanel
    Par FRED.G dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 02/02/2009, 12h03
  4. Réponses: 2
    Dernier message: 15/07/2008, 09h26
  5. [MySQL] Récupérer des éléments d'une base
    Par kumo dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/11/2007, 12h25

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