我从网站获取文本字符串并将其解析为 XDocument。我希望将某些元素的值提供给一个非常简单的对象(名为 NWSevent)。我的问题是原始字符串发生了变化,XML 树也发生了变化;有时事件很多,多达40个,有时只有一个,有时只有一个不具备所有特征。如果没有警报,则“事件”元素有一个标题,但没有 areaDesc、摘要或严重性。
我有两个 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);
}
}