使用LINQ读取XML元素

时间:2012-04-27 21:09:56

标签: c# xml linq-to-xml

我正在尝试使用LINQ从XML文件中读取值。 这是我第一次尝试使用LINQ而不是普通的C#/ .Net方法。

我的XML看起来像这样:

<Description>
<Account Green="A" White="D">House</Account>
<Account Green="B" White="D">Car</Account>
</Description>

这是我使用的LINQexpression。我想读取House的值,换句话说,读取具有属性A和D的元素。

var feeds = (from item in doc.Descendants("Description")
 from category in item.Elements("Account")                    
 let attribute = category.Attribute("Green")                    
 let xAttribute = category.Attribute("White")                    
 where attribute != null && (xAttribute != null && (xAttribute.Value == "A" 
 && attribute.Value == "D")) select item.Value).ToString();   

我无法弄清楚我做错了什么。 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

这里有一个IEnumerable<string> - 您显然只需要一个字符串,所以添加一个First()来获取枚举中第一个项目的值:

var feeds = (from item in doc.Descendants("Description")
 from category in item.Elements("Account")                    
 let attribute = category.Attribute("Green")                    
 let xAttribute = category.Attribute("White")                    
 where attribute != null && (xAttribute != null && (xAttribute.Value == "A" 
 && attribute.Value == "D")) select category.Value).First(); 

实现相同目标的更简单方法可能是:

string result = doc.Descendants("Account")
                   .Where(x => x.Attribute("Green") != null && x.Attribute("Green").Value == "A"
                            && x.Attribute("White") != null && x.Attribute("White").Value == "D")
                   .Select(x => x.Value)
                   .First();