我收到NRE错误,上面写着:“对象引用没有设置为对象的实例。”
从以下代码:
select new
{
ICAO = station.Element("icao").Value,
};
整个脚本是:
XDocument xmlDoc = XDocument.Load(@"http://api.wunderground.com/auto/wui/geo/GeoLookupXML/index.xml?query=94107");
var stations = from station in xmlDoc.Descendants("station")
select new
{
ICAO = station.Element("icao").Value,
};
lblXml.Text = "";
foreach (var station in stations)
{
lblXml.Text = lblXml.Text + "ICAO: " + station.ICAO + "<br />";
}
if (lblXml.Text == "")
lblXml.Text = "No Results.";
}
我不明白为什么它没有创建工作站对象并设置ICAO值。有关未来XML和C#参考的任何想法/提示吗?
答案 0 :(得分:9)
看来只有机场站才有icao元素。这应该适合你:
var stations = from airport in xmlDoc.Descendants("airport")
from station in airport.Elements("station")
select new
{
ICAO = station.Element("icao").Value,
};
您可以改为使用where条件来绕过异常:
var stations = from station in xmlDoc.Descendants("station")
where station.Element("icao") != null
select new
{
ICAO = station.Element("icao").Value,
};
此外,您可以提取这样的值以防止异常,但它会返回您可能需要或可能不需要的大量空记录:
ICAO = (string)station.Element("icao")
您可以为各种其他类型执行此操作,而不仅仅是字符串。
答案 1 :(得分:1)
示例中的XML文件会返回一些没有station
后代的icao
元素,因此有时station.Element("icao")
将返回null。
答案 2 :(得分:0)
我不认为xmlDoc.Descendants("station")
正在回归你所期待的。你应该在这里检查结果。这就是为什么station.Element(“icao”)返回null。
答案 3 :(得分:0)
该URL似乎没有返回XML数据,我怀疑这会导致您的节点引用返回空值。
答案 4 :(得分:0)
尝试这样的事情:
var stations = from station in xmlDoc.Elements("station")
select new
{
ICAO = station.Element("icao").Value,
};