C# LINQ TO XML属性标记未给出对象引用错误

C# LINQ TO XML属性标记未给出对象引用错误,c#,xml,linq-to-xml,C#,Xml,Linq To Xml,嗨,我做的如下 XDocument xmlDoc = XDocument.Load(@"F:\test2.xml"); var q = from c in xmlDoc.Descendants("autoivr.ok") where c.Element("LS_CZIP4").Value == "1234" select new { name

嗨,我做的如下

 XDocument xmlDoc = XDocument.Load(@"F:\test2.xml");
        var q = from c in xmlDoc.Descendants("autoivr.ok")
                where c.Element("LS_CZIP4").Value == "1234"
                select new
                {
                    name = c.Element("LS_LIN").Value,
                    state = c.Element("LS_STATE").Value                        
                };
当我使用 其中c.attribute(“LS_CZIP4”).Value==“1234” 我得到了对象引用未设置的错误,但当我使用c.element时,并没有这样的错误

下面是我制作的xml,它实际上是sql中转换为xml文件的表

<?xml version="1.0" standalone="yes"?>
<DocumentElement>
   <autoivr.ok>
      <LS_LIN>abc</LS_LIN>
      <LS_STATE>def</LS_STATE>
      <LS_TYPE>5</LS_TYPE>
      <LS_CZIP4>1234</LS_CZIP4>
   <priority>0</priority>
   </autoivr.ok>

abc
def
5.
1234
0

有人能告诉我这个问题,我该如何解决,我可以只使用元素标记而不是属性吗。谢谢

使用强制转换而不是访问
属性。转换为字符串将为不存在的元素返回null。获取
将引发异常

XDocument xmlDoc = XDocument.Load(@"F:\test2.xml");
var q = from c in xmlDoc.Descendants("autoivr.ok")
        where (string)c.Element("LS_CZIP4") == "1234"
        select new
        {
            name = (string)c.Element("LS_LIN"),
            state = (string)c.Element("LS_STATE")
        };
顺便说一句,您需要
的结束标记。另外,
LS_CZIP4
是元素,而不是属性。看到这里的区别了吗

元素:
abc


属性:

您能解释一下LS\u CZIP在这里是元素而不是属性吗?如果我们必须查询xml,可以使用元素而不是属性吗file@ffayyaz我添加了LS_LIN作为属性和元素的示例。如果项目是xml中的属性,则应该查询属性。若项为元素,则查询元素。基于xml结构生成查询。谢谢,我的xml结构很好,因为我有一个名为autoivr的表。好的,表有多个列和行,所以表中的每一列都表示为xml文件中的一个元素,依此类推。@ffayyaz实际上我将使用
autroivrs
作为根元素,为每行使用
autoivr
子元素。但是您当前的xml结构也可以工作