Linq to XML + récupération de plusieurs élements [Résolu]

Signaler
Messages postés
34
Date d'inscription
mercredi 26 octobre 2005
Statut
Membre
Dernière intervention
24 septembre 2014
-
Messages postés
34
Date d'inscription
mercredi 26 octobre 2005
Statut
Membre
Dernière intervention
24 septembre 2014
-
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

Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
30
Salut,

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


_____________
Kenji
Messages postés
34
Date d'inscription
mercredi 26 octobre 2005
Statut
Membre
Dernière intervention
24 septembre 2014

oui effectivement, j'y avais pas pensé. Merci
Messages postés
14896
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 octobre 2020
446
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
Messages postés
34
Date d'inscription
mercredi 26 octobre 2005
Statut
Membre
Dernière intervention
24 septembre 2014

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
Messages postés
14896
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 octobre 2020
446
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
Messages postés
34
Date d'inscription
mercredi 26 octobre 2005
Statut
Membre
Dernière intervention
24 septembre 2014

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.