2010-06-09 4 views
0

J'ai un XElement que je reçois après l'analyse d'un fichier XML. Ce XElement doit être lu seulement quand le besoin s'en fait sentir, je l'ai stocké dans une liste pour une utilisation future.Lire complètement Xlement en utilisant LinQ

Je dois lire ce XElement en utilisant Linq.

XDocument doc = XDocument.Parse(DataManager.offeringElements[index].DataElem.ToString()); 

     var docNode = from dataNode in doc.Descendants("DataLinks") 
         select new 
         { 
          Offering = dataNode .Element("link").Value, 
          linkUrl = dataNode.Element("link").Attribue("href").Value 
         }; 

le XElement a les nœuds suivants

<DataLinks> 
     <link href="">a. Management</link> 
     <link href="">b. Analytics</link> 
     <link href="">c. Development</link> 
    </DataLinks> 

Mon problème est que je ne suis pas capable de lire tous les trois nodes.I suis en mesure d'obtenir que le premier noeud. Où est-ce que ça va mal?

Répondre

0

Cela devrait fonctionner, c'est-à-dire Elemenets non Descendants et s'assurer lors de la sélection de nouveaux, que vous sélectionnez un type d'objet.

public class ObjectType 
{ 
    public Offering {get; set;} 
    public linkUrl {get; set;} 
} 



var docNode = from dataNode in doc.Elemenets ("DataLinks") 
        select new ObjectType 
        { 
         Offering = dataNode .Element("link").Value, 
         linkUrl = dataNode.Element("link").Attribue("href").Value 
        }; 
0

Je le ferais comme ça. À mon humble avis, la syntaxe de la méthode semble plus propre que la syntaxe de la requête. Notez qu'il s'agit d'un code non testé.

IEnumerable<XElement> seqLinks = doc.Descendants("DataLinks").Single() 
    .Descendants("link"); 

foreach(XElement link in seqLinks) 
{ 
    Console.WriteLine("Value is {0}, and href is {1}", 
     link.Value, link.Attribute("href").Value) 
}