2009-06-01 2 views
1

나는 다음과 같은 XML 문서는 C#을 실버 라이트에로드되는 한 :LINQ to XML : Silverlight C#에서 하위 노드를 선택하도록 지정 하시겠습니까?

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

내가 부모를 조회 "아들"만 "딸"노드의 목록을 얻을 수 있도록 내가 LINQ 쿼리를 수행하고 싶습니다. "son"유형의 노드에 도달하면 자체 자식에 대해 다른 쿼리를 수행하려고합니다.

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

모두를 체인 아래로. 요소이거나 그 다음에 등 – BerggreenDK

답변

2

난 당신이 Elements 기능을 사용할 필요가 제대로 질문을 이해한다면 :

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

      var grandsons_qry = from grandson in sons_qry.Descendants() 
           select grandson; 
나는이 샘플 데이터를하지 않는 한, 내가 을 사용 그래서는 XML에 대해 서로 다른 태그를 사용할 것이라고 생각
+0

이 효과가 있습니다. 정확히 내가 필요로하는 것. 고맙습니다! – nerdabilly