2009-04-29 8 views
1

veulent interroger ci-dessous xmlLINQ to xml

<courseList filedUnder="Courses"> 
    <category code="4wd" title="4wd Operation"> 
    <product code="lr" title="4wd Bush Driving"> 
     <duration>1 Day</duration> 
    </product> 
    <product code="hr" title="4wd Defensive Driving"> 
     <duration>1 Day</duration> 
    </product> 
    <product code="sr" title="Self-Recovery"> 
     <duration>1 Day</duration> 
    </product> 
    </category> 
</courseList> 

pour l'instant je fais quelque chose ci-dessous:

 var list = (from x in xd.Descendants("product").Attributes("title") 
     select new { Title= x.Value}).ToList(); 

qui retourne juste: la valeur du titre

Ce que je veux est dans la même requête return Valeur de durée aussi.

Comment cela peut-il être réalisé.

Merci

Répondre

2

Actuellement vous choisissez les attributs au lieu des éléments . Pour inclure la durée, vous aurez besoin de l'élément entier.

var list = xd.Descendants("product") 
      .Select(element => new 
       { Title = element.Attribute("title").Value, 
        Duration = element.Element("duration").Value }) 
      .ToList(); 

(Notez que cela ne fait aucune sorte d'erreur de vérification - il vaut mieux être un attribut de titre et un élément de durée ...)

+0

Skeet @ Jon: avez-vous besoin faire des vérifications nuls dans les instructions Linq/Lambda s'il existe une structure irrégulière possible au XML. c'est-à-dire s'il n'y avait pas nécessairement un élément ("durée") "au-dessous de , il échouerait en repassant avec succès une valeur nulle, ou ferait-il exploser –

+0

Merci cela trié. – Sreedhar

+0

@jon skeet: doh! ... manqué votre dernière ligne de la réponse. –

1
var list = (from x in xd.Descendants("product") 
      select new { 
       Title= x.Attribute("title") != null ? x.Attributes("title").Value : "", 
       Duration = x.Element("duration") != null ? x.Element("duration").Value : "" 
      } 
      ).ToList(); 
+0

Quelle est la syntaxe de ce VB.net? – Sreedhar