C# 解析XML:NullReferenceException变量元素

C# 解析XML:NullReferenceException变量元素,c#,xml,C#,Xml,我从一个网站获取一个文本字符串,并将其解析为XDocument。我希望将某些元素的值输入到一个非常简单的对象(名为NWSevent)中。我的问题是原始字符串的变化和XML树的变化;有时有许多事件,多达40个,有时只有一个,有时只有一个不具备所有特征。如果没有警报,“事件”元素有标题,但没有areaDesc、summary或severity NWSevent有两个构造函数,一个接受单个字符串,另一个接受四个字符串参数。我无法绕过NullReferenceException。下面的if语句无法执行此

我从一个网站获取一个文本字符串,并将其解析为XDocument。我希望将某些元素的值输入到一个非常简单的对象(名为NWSevent)中。我的问题是原始字符串的变化和XML树的变化;有时有许多事件,多达40个,有时只有一个,有时只有一个不具备所有特征。如果没有警报,“事件”元素有标题,但没有areaDesc、summary或severity

NWSevent有两个构造函数,一个接受单个字符串,另一个接受四个字符串参数。我无法绕过NullReferenceException。下面的if语句无法执行此操作,因为没有可比较的值。我非常感谢你的帮助

    public static void ParseWeatherData(String xmlString)
    {
        String ticker = string.Empty;
        XDocument root = XDocument.Parse(xmlString);

        XNamespace ns = XNamespace.Get("http://www.w3.org/2005/Atom");
        XNamespace nsCap = XNamespace.Get("urn:oasis:names:tc:emergency:cap:1.1");

        //get list of entry elements, set conditions for title, areaDesc, etc
        var xlist = root.Descendants(ns + "entry").Select(elem => new
        { //use first or default to deal with possiblity of null return
            Title = elem.Descendants(ns + "title").FirstOrDefault(),
            AreaDesc = elem.Descendants(nsCap + "areaDesc").FirstOrDefault(),
            Severity = elem.Descendants(nsCap + "severity").FirstOrDefault(),
            Summary = elem.Descendants(ns + "summary").FirstOrDefault()
        });

        foreach (var el in xlist)       //need to address null values when no alerts
        {
            if (el.AreaDesc.Value != null)      //causes yellow null ERROR; no value exists for el.areaDesc.value
            {
                String titleIn = el.Title.Value;
                String areaIn = el.AreaDesc.Value;
                String severityIn = el.Severity.Value;
                String summaryIn = el.Summary.Value;
                new Models.NWSevent(titleIn, areaIn, severityIn, summaryIn);
            }
            else
            {
                String titleIn = el.Title.Value;
                new Models.NWSevent(titleIn);
            }
        }

尴尬!道具给德韦伯里指出了这一点。我只需要将if语句从

如果(el.AreaDesc.Value!=null){}


如果(el.AreaDesc!=null){}

在我看来,在尝试获取值之前,您需要检查el.AreaDesc是否为null