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();
为空值添加保护可以解决您的问题。