2010-06-29 3 views
0

나는 xml 파일XML 파일 읽기 C#에서 LINQ에 XML을 사용하여

<RootElement> 
<Children> 
    <Child Name="FirstChild" Start="0" End="2"> 
     <Sibling Name="Test1" /> 
     <Sibling Name="Test2" /> 
     <AdditionalSibling Name="Add_Test_1" /> 
     <AdditionalSibling Name="Add_Test_2" /> 
     <MissingSibling Name="Miss_Test_1" /> 
     <MissingSibling Name="Miss_Test_2"/
</Child> 

<Child Name="SecondChild" Start="0" End="2"> 
     <Sibling Name="Test3" /> 
     <Sibling Name="Test4" /> 
</Child> 
<Child Name="ThirdChild" Start="0" End="2"> 
     <Sibling Name="Test5" /> 
     <Sibling Name="Test6" /> 
    </Child> 
    <Child Name="FourthChild" Start="0" End="2"> 
     <Sibling Name="Test7" /> 
     <Sibling Name="Test8" /> 
    </Child> 
    <Child Name="FifthChild" Start="0" End="2"> 
     <Sibling Name="Test9" /> 
     <Sibling Name="Test10" /> 
    </Child> 
    <Child Name="SixthChild" Start="0" End="2"> 
     <Sibling Name="Test11" /> 
     <Sibling Name="Test12" /> 
    </Child> 

    <MatchedChilds> 
    <Child Name="FirstChild" /> 
    <Child Name="SecondChild" /> 
    <Child Name="ThirdChild" /> 
    <Child Name="FourthChild" /> 
    <Child Name="FifthChild" /> 
    <Child Name="SixthChild" /> 
    </MatchedChilds> 
</Children> 
</RootElement> 

내가하는 요소 "아동"의 속성 값을 읽을 필요가 다음과 같은 구조를 가지고 (Sample.xml)를했습니다 직접 "RootElement"

지금은

  List<string> lst = (from element in XDocument.Load(Application.StartupPath + "\\Sample.xml") 
                 .Descendants("Child") 
                 group element by element.Attribute("Name").Value into KeyGroup select KeyGroup.Key) 
                 .ToList(); 

같은 LINQ 쿼리를 사용하고 있지만 "이름"파일에있는 모든 "아이"요소의 속성 값을 반환 아래.

나에게 그렇게 목록 이름 요소를 가질 것, 미리

답변

3

사용 무언가 :

XDocument doc = XDocument.Load(Application.StartupPath + "\\Sample.xml"); 
List<string> lst = doc.Root.Elements("Child") 
         .Select(x => (string) x.Attribute("Name")) 
         .ToList(); 

Elements() 대신 Descendants()의 사용을. 그러면 모든 이름 속성이 생깁니다. 원래 샘플 코드에서 그룹화하는 이유가 무엇인지는 분명하지 않지만 잘하면 이것이 가능할 것입니다.

+0

@ Jon Skeet : 감사합니다 ...... –

0

당신은 이름으로 그룹화에 감사

LINQ

이 사용하는 XML을 할 수있는 더 나은 솔루션을 제공하십시오. 당신은 쿼리하고 다음과 같은 결과를 반복 할 수있다 :이 같은

var query = from element in XDocument.Load(Application.StartupPath + "\\Sample.xml") 
    .Descendants("Child") 
    group element by element.Attribute("Name").Value into KeyGroup 
    select new { Grouping = KeyGroup.Key, Children = KeyGroup }; 

및 반복

foreach(var namekey in query) 
{ 
    Console.WriteLine(namekey.Grouping); 
    foreach(var child in namekey.Children) 
    { 
     Console.WriteLine(child.whatever); 
    } 
} 
+0

@ David : 감사합니다 ............. –