2009-06-01 2 views
1

я следующий XML документ загружается в C# Silverlight:LINQ to XML: отложить выбор детей в Silverlight C#?

<parent> 
    <son name="Jim"> 
     <grandson>Billy</grandson> 
     <granddaughter>Sue</granddaughter> 
    </son> 
    <daughter name="Sally"> 
    </daughter> 
</parent> 

Я хотел бы сделать запрос LINQ, так что я запрашиваю родителей и получить список «сын» и «дочь» только узлы. Когда я добираюсь до узла типа «сын», я хочу сделать еще один запрос для своих собственных детей.

Я попытался это:

IEnumerable<XElement> Children = 
        from childNode in parents.Descendants() 
        select (XElement)childNode ; 

foreach(XElement childNode in Children){ 
// other code 
} 

, но это дает мне все (сын, дочь, внук, внучка).

То, что я хотел бы сделать что-то вроде этого:

foreach(XElement childNode in Children){ 
    switch(childNode.Name.ToString()){ 
     case "son": 
      // look for "grandson" and "granddaughter" as children of "son" now 
      break; 
     case "daughter": 
      // don't look for anything 
      break; 
     } 
    } 

Так в основном, я только хочу, чтобы первый уровень детей вернулись в запросе, и я буду запрашивать остальное позже.

Я не уверен, что это должно быть сделано в исходном запросе LINQ, в условии foreach или что. Я не контролирую формат XML-документа, поэтому я не могу изменить его на что-то лучше. Благодаря!

+0

Я думаю, что я хотел бы использовать различные тег для XML, так что, если это не образец данных, я хотел бы использовать и все путь вниз по цепи. должен быть элементом или еще что-то, а затем просто и т. Д. – BerggreenDK

ответ

2

Если я правильно понимаю ваш вопрос вы должны использовать Elements функции:

  var sons_qry = from son in parents.Elements() 
         select son; 

      var grandsons_qry = from grandson in sons_qry.Descendants() 
           select grandson; 
+0

, который сработал! Именно то, что мне нужно. Спасибо! – nerdabilly

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