LINQ to XML – 尝试按属性值选择元素列表

我正在尝试从XML文档中获取元素列表,其中节点具有特定的属性值。 该文档的结构如下:

 some text some other text some more text even more text  

我想要的结果是IEnumerable包含type =“type1”的两个节点,例如

  some text some more text 

我正在使用var doc = XDocument.Load(@"C:\document.xml");加载文档var doc = XDocument.Load(@"C:\document.xml");

我可以获得一个IEnumerable其中包含我想要使用的节点的属性

 var foo = doc.Descendants("node") .Attributes("type") .Where(x => x.Value == "type1") .ToList(); 

但是,如果我尝试使用下面的代码获取包含这些属性的元素,则会得到一个Object reference not set to an instance of an object.Object reference not set to an instance of an object. 错误。 我使用的代码是

 var bar = doc.Descendants("node") .Where(x => x.Attribute("type").Value == "type1") .ToList(); 

任何帮助,弄清楚为什么我没有得到我期望的结果将不胜感激。

如果节点缺少该属性,则可能发生这种情况。 尝试:

  var bar = doc.Descendants("node") .Where(x => (string)x.Attribute("type") == "type1") .ToList(); 
 var bar = doc.Descendants("node") .Where(x => x.Attribute("type") != null && x.Attribute("type").Value == "type1") .ToList(); 

为空值添加保护可以解决您的问题。