Linq to XML + récupération de plusieurs élements

Résolu
cs_Yanith Messages postés 34 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 24 septembre 2014 - 1 nov. 2012 à 10:32
cs_Yanith Messages postés 34 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 24 septembre 2014 - 4 nov. 2012 à 16:58
Bonjour,

j'ai un soucie avec une requète Linq to XML, Je vous présente déjà l'architecture de mon fichier XML que voici :

<Root>
  <ElementA AttributA="Valeur Attribut A">
    <Element1>
      <ElementA1>Valeur A1</ElementA1>
      <ElementB2>Valeur B2</ElementB2>
      <ElementC3>Valeur C3</ElementC3>
    </Element1>
    <Element2>
      <ElementA1>Valeur A1</ElementA1>
      <ElementB2>Valeur B2</ElementB2>
      <ElementC3>Valeur C3</ElementC3>
      <ElementD4>Valeur D4</ElementD4>
      <ElementE5>Valeur E5</ElementE5>
      <ElementF6>Valeur F6</ElementF6>
    </Element2>
  </ElementA>
  <ElementA AttributA="Valeur Attribut B">
    <Element1>
      <ElementA1>Valeur A1</ElementA1>
      <ElementB2>Valeur B2</ElementB2>
      <ElementC3>Valeur C3</ElementC3>
    </Element1>
    <Element2>
      <ElementA1>Valeur A1</ElementA1>
      <ElementB2>Valeur B2</ElementB2>
      <ElementC3>Valeur C3</ElementC3>
      <ElementD4>Valeur D4</ElementD4>
      <ElementE5>Valeur E5</ElementE5>
      <ElementF6>Valeur F6</ElementF6>
    </Element2>
  </ElementA>
</Root>


Je ne parviens pas à récuperer toutes les valeurs des enfants de <Element1> dans <ElementA> en fitrant par la valeur .

Voici le code que j'utilise, mais je ne sais pas quoi mettre à la place des XXXXXXXXXX

            IEnumerable<XElement> Result = from el in _xDoc.Root.Elements("ElementA")
                                           where (string)el.Attribute("AttributA") == "Valeur Attribut A"
                                           select el.XXXXXXXXXX ;


Pourriez vous m'aider SVp ?

6 réponses

Utilisateur anonyme
1 nov. 2012 à 15:17
Salut,

Pourquoi pas une requête XPath :
IEnumerable<XElement> Result = xDoc.XPathSelectElements("//ElementA[@AttributA='Valeur Attribut A']/Element1/*");


_____________
Kenji
3
cs_Yanith Messages postés 34 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 24 septembre 2014
1 nov. 2012 à 16:58
oui effectivement, j'y avais pas pensé. Merci
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
Modifié par Whismeril le 8/03/2014 à 11:00
Bonjour

IEnumerable<XElement> Result = (from el in _xDoc.Root.Elements("ElementA")
                                           where (string)el.Attribute("AttributA") == "Valeur Attribut A"
                                           select el.Value).ToList() ;


De tête mais ça doit être bon.
Whismeril
0
cs_Yanith Messages postés 34 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 24 septembre 2014
4 nov. 2012 à 10:37
merci pour ta réponce, mais il se trouve qu'il y a deux erreurs :

- ToList() renvoie vers un List<string> donc IEnumerable<XElement> ne peu pas fonctionner
- Et quand on corrige la première erreur, la deuxième survient , les éléments qui ressortent sont tous les enfants ElementA. Alors que je voudrais tous les enfants de Element1 dans ElementA .

Mais bon t'embete pas, avec la réponce de Charles j'ai pu m'en sortir. Merci quand même
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
4 nov. 2012 à 11:39
Ha oui désolé, si tu dois sortir des objets complets il y a quelques exemples sur cette discussion, ou celle-ci.

Quand à la liste, même si elle ne retourne pas ce que tu veux j'aurais du écrire .ToList<XElement>()


Whismeril
0
cs_Yanith Messages postés 34 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 24 septembre 2014
4 nov. 2012 à 16:58
haa oui tiens, je ne connaissais pas .ToList<XElement>(), merci pour l'info. Les liens je les avais déjà parcourus vite fait mais je vais m'y pencher plus longuement.
0
Rejoignez-nous