linq-to-xml语法错误:检索属性值

时间:2014-11-07 04:46:51

标签: xml asp.net-mvc linq linq-to-xml

我正在加载xml并需要检索主元素的属性id

示例xml:

enter image description here

我需要使用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行失败 - “对象引用未设置为对象的实例。”请告知我的语法有什么问题?

2 个答案:

答案 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"