2010-11-04 5 views
0

J'espère que cela a du sens. J'ai le document XML suivant.C#, LINQ Obtention des éléments enfants d'un élément parent spécifié

<PrinterDirectory> 
    <Country Name="UK> 
    <Region Name="Aberdeen" /> 
    <Region Name="Birmingham" /> 
    <Region Name="London" /> 
    </Country> 
    <Country Name="France"> 
    <Region Name="Paris" /> 
    <Region Name="Bordeaux" /> 
    </Country> 
</PrinterDirectory> 

Quel est le LINQ pour récupérer uniquement les régions du Royaume-Uni par exemple?

J'ai essayé

varRegionQuery = from items in xdoc.Descendants("Country") 
       where items.Attribute("Name").Value == "UK" 
       select new 
       { 
        _Region = items.Element("Region").Attribute("Name").Value 
       }; 

Cela récupère cependant que "Aberdeen".

Répondre

6

La façon la plus simple est probablement d'utiliser une clause from ultérieure, comme ceci:

var regionQuery = from items in xdoc.Descendants("Country") 
        where items.Attribute("Name").Value == "UK" 
        from region in items.Elements("Region") 
        select region.Attribute("Name").Value; 

Notez que cela face à plusieurs <Country Name="UK"> éléments. Laisser les instructions sont utiles dans le cas où vous avez une valeur nulle dans votre fichier XML.

+0

A travaillé un régal, merci pour votre temps. –

1
var regionQuery = from item in xdoc.Descendants("Country") 
           let countryCode = item.Attribute("Name") ?? new XAttribute("Name", string.Empty) 
           where countryCode.Value == "UK" 
           from region in item.Descendants("Region") 
           let regionName = region.Attribute("Name") ?? new XAttribute("Name", string.Empty) 
           select new {Name = regionName}; 

Cela nous permet de rassembler toutes les données, même si certaines d'entre elles ne sont pas valides, et nous pourrons par la suite les récupérer plus tard.

Questions connexes