我正在加载xml并需要检索主元素的属性id
示例xml:
我需要使用linq然后使用Street Name
来获取列表ID的值我认为我需要使用DescendantsAndSelf,因为它是主要元素
XElement source = XElement.Load("...");
var listing = (from details in source.DescendantsAndSelf()
where details.Attribute("id").Value == "8225706"
select new ListVM
{
Street = details.Element("Address").Element("Street")
}).ToList();
在第3行失败 - “对象引用未设置为对象的实例。”请告知我的语法有什么问题?
答案 0 :(得分:0)
问题是你的details.Attribute("id").Value
对于没有'id'属性的所有元素都会失败,因为你在Null引用上调用'Value'属性。
在比较值之前添加details.Attribute("id") != null
检查。
您的查询应如下所示: -
var listing = (from details in source.DescendantsAndSelf()
where details.Attribute("id") != null && details.Attribute("id").Value == "8225706"
select new
{
Street = details.Element("Address").Element("Street")
}).ToList();
答案 1 :(得分:0)
更简单的替代方法是将XAttribute
强制转换为string
以避免空引用异常:
where (string)details.Attribute("id") == "8225706"