2010-10-06 5 views
1

J'ai un fichier XML, comme ceci:Utilisez LINQ pour lire tous les noeuds de XML

<?xml version="1.0" encoding="utf-8" ?> 
<ROOT> 
    <NAME> 
     ItemName 
    </NAME> 
    <LIST> 
     <ITEM> 
      ListItem1 
     </ITEM> 
     <ITEM> 
      ListItem2 
     </ITEM> 
     <ITEM> 
      ListItem3 
     </ITEM> 
    </LIST> 
</ROOT> 

Comment puis-je utiliser LINQ pour obtenir tous les éléments contenus dans la balise LIST?

Répondre

4

Quelque chose comme:

XDocument doc = XDocument.Load("foo.xml"); 
var items = from list in doc.Descendants("LIST") 
      from item in list.Elements("ITEM") 
      select item; 

Cela va faire face à de multiples éléments « LIST », et ne trouvera pas « ITEM » éléments sauf directement sous les « LIST ». Si vous ne se soucient pas de ces subtilités, vous pouvez simplement utiliser:

XDocument doc = XDocument.Load("foo.xml"); 
var items = doc.Descendants("ITEM"); 
3

Une syntaxe alternative serait de chaîne la méthode Descendents pour obtenir plus précisément les nœuds ITEM qui sont les enfants des nœuds LISTE:

XDocument doc = XDocument.Load("foo.xml"); 
var nodes = doc.Descendants("LIST").Descendants("ITEM"); 
+0

Je n'appellerais pas cela une «alternative» - elle est sémantiquement identique à la première réponse de Jon, en utilisant simplement une chaîne de méthodes au lieu de la syntaxe de requête. –

+0

Modifié la réponse pour indiquer qu'il s'agit d'une syntaxe alternative. –

+0

Notez que vous avez besoin de 'using System.Xml.Linq;' pour obtenir les méthodes d'extension qui vous permettent de chaîner .Descendants sur IEnumerables – AaronLS

Questions connexes