2010-11-15 2 views
1

Привет У меня есть следующая структура XML:LinQ to XML; потомки запроса с использованием значения узла родительского

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

Ищу использовать LinqtoXML и для того, чтобы получить список доступных Person я могу просто написать этот запрос:

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

Теперь, что я должен сделать, чтобы получить все Лицо , где Категория в элементе PersonList = = к определенному значению? Я не могу использовать Родитель, потому что мне нужно указать элемент PersonList, так как структура XML может отличаться от этой, но не имя элемента. Возможно ли это?

+0

Ваша причина неиспользования Родитель не ясно. Не могли бы вы привести пример того, почему это может закончиться неудачей? –

+0

@Jon: Похоже, он говорит, что вложенность может быть разной. – SLaks

+0

@SLaks: Возможно, но не ясно ... и непонятно, что он хочет делать, если это так. –

ответ

2

Похоже, что вы ищете

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

Если вы хотите, чтобы получить категорию конкретного <Person> элемента, вы можете написать

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

Спасибо SLacks, вот что я искал. Для других ребят проблема заключается в том, что в будущем у меня может быть элемент Person, вложенный в 4 или 5 родителей, так что элемент PersonList может быть пятым родительским элементом, а не третьим, как сейчас. – Raffaeu

Смежные вопросы