C#Linq over XML => Lambda表达

时间:2010-03-05 20:30:19

标签: c# xml linq lambda

我有一个xml文档,其中包含以下内容:

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

我已经找到了如何找到LabelName ='container'的元素。但我不熟悉lambda表达式,并想知道如何访问LINQ结果中的信息。 Lambda表达式可能也不是一种方法。我对任何建议持开放态度。

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

感谢。

编辑:我想弄清楚的是如何从LabelName =“container”的XML中获取LabelHeight和LabelWidth

2 个答案:

答案 0 :(得分: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
                 }
             ); 

答案 1 :(得分: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  
}

这将返回具有两个属性(LabelWeight和LabelWidth)的IEnumerable匿名类型。 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);  
}