LINQ to XML - 查询元素

时间:2011-01-05 21:04:58

标签: c# xml linq-to-xml

  

 <Contents>
   <Content Book="ABC">
      <Item type="New" id="1" File="book1.out"/>
      <Item type="Old" id="2" File="book1.out"/>
   </Content
</Contents>
  

在上面的XML中,我需要输入字符串“Book1.out”作为输出 条件是Book =“ABC”和ID =“1”

如何在LINQ中一次性执行此操作,而无需迭代结果。

这是我的初始代码:

var result = (from query in _configDoc.Descendants("Contents").Descendants("Content")
              where query.Attribute("Book").Value == "ABC") select query;

谢谢..

2 个答案:

答案 0 :(得分:1)

获取具有属性book =“ABC”和id = 1的Item元素的值:

var result = _configDoc.Descendants("Content")
   .Where(c => c.Attribute("Book").Value == "ABC")
   .Descendants("Item").Single(e => e.Attribute("id").Value == "1").Value;

这是一个简单的版本,没有对属性进行空值检查。此外,根据您的真实场景,XPath表达式可能更简单。

答案 1 :(得分:0)

您可以跳过LINQ并改用XPath,如下所示:

using System.Xml.XPath;

...
var result = _configDoc.XPathEvaluate("/Contents/Content[@Book='ABC']/Item[@ID='1']/@File");