2010-03-05 152 views
3

我具有由許多下面的XML文檔:C#的LINQ在XML => Lambda表達式

- <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> 

我已想出如何找到元件,其中標籤=「容器」。但我不熟悉lambda表達式,並想知道如何訪問我的LINQ結果中的信息。 Lambda表達式可能不是要走的路。我願意接受任何建議。

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

謝謝。

編輯:我試圖找出是如何得到LabelHeight和LabelWidth在哪裏標籤=「容器」

+0

這並不完全清楚您想要做什麼,請您將其描述得更精確一些。您可能希望得到結果的樣本。 – AxelEckenberger 2010-03-05 20:45:01

+0

請看我上面的編輯。 – Nathan 2010-03-05 21:04:05

回答

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 
} 

這具有兩個屬性返回匿名類型的IEnumerable的XML(可LabelWeight和LabelWidth)。 IEnumerable中的每個對象都表示LabelName =「container」的LabelFieldB0。

所以,你可以「在」你的數據做這樣的事情:

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

謝謝,效果很好。 – Nathan 2010-03-05 21:44:56

5

下面的代碼創建一個包含標籤名稱,寬度和高度的新的匿名對象。

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 
       } 
      );