2010-06-29 6 views
0

J'ai un fichier xml (Sample.xml) qui a la structure suivantefichier Xml lecture en utilisant XML à LINQ en C#

<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> 

i besoin de lire les valeurs d'attribut de l'élément « enfant » qui est directement sous l'élément « RootElement »

maintenant, je suis en utilisant la requête LINQ comme

  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(); 

mais il renvoie la valeur d'attribut de « Nom » de tous les « enfants » dans le fichier.

S'il vous plaît me donner une meilleure solution pour le faire en utilisant XML LINQ

Merci à l'avance

Répondre

3

Utilisez quelque chose comme ceci:

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

Notez l'utilisation de Elements() au lieu de Descendants(). Cela vous obtiendra tous les attributs de nom. Je ne comprends pas pourquoi vous avez regroupé votre code d'origine, mais j'espère que cela vous aidera à démarrer.

+0

@ Jon Skeet: Merci ...... –

0

Vous par nom groupé, de sorte que votre liste aurait des éléments de nom. Vous pouvez interroger et itérer vos résultats comme suit:

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 }; 

et l'itération

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

@ David: Merci ............. –

Questions connexes