2010-11-15 20 views
1

Salut J'ai la structure XML suivante:LinQ to XML; descendants de la requête en utilisant la valeur de nœud parent

<Root> 
<Persons> 
    <PersonList Category="Employee"> 
    <Person Name="John" Id="5" /> 
    <Person Name="Mary" Id="10" /> 
    </PersonList> 
</Persons> 
</Root> 

Je cherche à utiliser LinqtoXML et afin d'obtenir une liste de personne disponible Je peux simplement écrire cette requête:

var persons = from p in myDoc.Descendants("Person") 
select p; 

Maintenant, ce que je dois faire pour obtenir toute la personne la catégorie dans l'élément PersonList est = à une valeur spécifique? Je ne peux pas utiliser Parent car je dois spécifier l'élément PersonList car la structure du XML peut être différente de celle-ci mais pas le nom de l'élément. Est-ce possible?

+0

Votre raison pour ne pas utiliser le parent est clair du tout. Pourriez-vous donner un exemple de pourquoi cela pourrait échouer? –

+0

@Jon: On dirait qu'il dit que l'imbrication peut être différente. – SLaks

+0

@SLaks: C'est possible, mais pas clair ... et pas clair ce qu'il veut faire si c'est le cas. –

Répondre

2

On dirait que vous cherchez

var people = myDoc.Descendants("PersonList") 
        .Where(p => p.Attribute("Category").Value == something) 
        .Descendants("Person"); 

Si vous souhaitez obtenir la catégorie d'un élément spécifique <Person>, vous pouvez écrire

var category = elem.AncestorsAndSelf("PersonList") 
        .First().Attribute("Category").Value; 
+0

Merci SLacks, c'est ce que je cherchais. Pour les autres gars, le problème est que dans le futur je pourrais avoir l'élément Person imbriqué dans 4 ou 5 parents de plus pour que l'élément PersonList soit le 5ème parent et non le 3ème comme maintenant. – Raffaeu