2010-03-05 5 views
3

J'ai un document XML qui se compose d'un certain nombre des éléments suivants:C# LINQ sur XML => Lambda Expression

- <LabelFieldBO> 
    <Height>23</Height> 
    <Width>100</Width> 
    <Top>32</Top> 
    <Left>128</Left> 
    <FieldName>field4</FieldName> 
    <Text>aoi_name</Text> 
    <DataColumn>aoi_name</DataColumn> 
    <FontFamily>Arial</FontFamily> 
    <FontStyle>Regular</FontStyle> 
    <FontSize>8.25</FontSize> 
    <Rotation>0</Rotation> 
    <LabelName /> 
    <LabelHeight>0</LabelHeight> 
    <LabelWidth>0</LabelWidth> 
    <BarCoded>false</BarCoded> 
    </LabelFieldBO> 

J'ai compris comment trouver l'élément où LabelName = 'contenant'. Mais je ne connais pas très bien les expressions lambda et j'aimerais savoir comment accéder aux informations contenues dans mes résultats LINQ. Les expressions lambda peuvent ne pas être le chemin à parcourir non plus. Je suis ouvert à toutes suggestions.

var dimensions = from field in xml.Elements("LabelFieldBO") 
          where field.Element("LabelName").Value == "container" 
          select field; 

Merci.

EDIT: Ce que je suis en train de comprendre est comment obtenir le HauteurEtiquette et labelwidth sur XML où LabelName = « conteneur »

+0

On ne sait pas exactement ce que vous voulez faire, pourriez-vous s'il vous plaît le décrire un peu plus exactement. Possible avec des exemples des résultats que vous attendez. – AxelEckenberger

+0

S'il vous plaît voir mon Modifier ci-dessus. – Nathan

Répondre

1
from field in xml.Elements("LabelFieldBO") 
where field.Element("LabelName").Value == "container" 
select new 
{ 
    LabelHeight = field.Element("LabelHeight").Value, 
    LabelWidth = field.Element("LabelWidth").Value 
} 

Ce retourne un IEnumerable de types anonymes avec deux propriétés (LabelWeight et LabelWidth). Chaque objet dans IEnumerable représente un LabelFieldB0 avec LabelName = "container".

Ainsi, vous pouvez « obtenir à » vos données faire quelque chose comme:

var containerLabels = 
    from field in xml.Elements("LabelFieldBO") 
    where field.Element("LabelName").Value == "container" 
    select new 
    { 
     LabelHeight = field.Element("LabelHeight").Value, 
     LabelWidth = field.Element("LabelWidth").Value 
    } 

foreach (var containerLabel in containerLabels) 
{ 
    Console.WriteLine(containerLabel.LabelHeight + " " 
     + containerLabel.LabelWidth); 
} 
+0

Merci, a bien fonctionné. – Nathan

5

Le code suivant crée un nouvel objet anonyme qui contient le nom de l'étiquette, la largeur et la hauteur.

var result = doc.Elements("LabelFieldBo") 
       .Where(x => x.Element("LabelName").Value == "container") 
       .Select(x => 
        new { 
         Name = x.Element("LabelName").Value, 
         Height = x.Element("LabelHeight").Value, 
         Width = x.Element("LabelWidth").Value 
       } 
      );