我可能遗漏了一些明显的东西,但是我在Linq to xml查询中得到了一个'对象引用未设置为对象的实例'null错误。
以下是xml
的示例<airport>
<station>
<city>Rutland</city>
<state>VT</state>
<country>US</country>
<icao>KRUT</icao>
<lat>43.52999878</lat>
<lon>-72.94999695</lon>
</station>
</airport>
这是我的查询
XDocument geoLocation = XDocument.Load("myTestGeo.xml");
var currLocation = from geo in geoLocation.Descendants("airport")
select new
{
City = geo.Element("city").Value,
State = geo.Element("state").Value,
Country = geo.Element("country").Value,
Station = geo.Element("icao").Value
Lat = geo.Element("lat").Value,
Lon = geo.Element("lon").Value
};
我整天都在看这个并尝试过很多东西,但没有运气。有人可以帮助这个密集的程序员吗?
答案 0 :(得分:1)
城市和所有其他价值观都在车站内,不是机场的直接后代。
或许有一些缩进可以解释这个问题。
<airport>
<station>
<city>Rutland</city>
<state>VT</state>
<country>US</country>
<icao>KRUT</icao>
<lat>43.52999878</lat>
<lon>-72.94999695</lon>
</station>
</airport>
这可能有用:
XDocument geoLocation = XDocument.Load("myTestGeo.xml");
var currLocation = from geo in geoLocation.Descendants("station")
select new
{
City = geo.Element("city").Value,
State = geo.Element("state").Value,
Country = geo.Element("country").Value,
Station = geo.Element("icao").Value
Lat = geo.Element("lat").Value,
Lon = geo.Element("lon").Value
};
答案 1 :(得分:0)
Descendants()
给出当前节点下任何级别的所有元素,而Element()
仅查看当前节点的直接子节点。由于您通过Element()
调用请求的所有值均为station
而非airport
的子项,因此对Element()
的调用不会返回任何对象。使用.Value
取消引用它们会导致异常。
如果您将查询更改为以下内容,则应该有效:
XDocument geoLocation = XDocument.Load("myTestGeo.xml");
var currLocation = from geo in geoLocation.Descendants("station")
select new
{
City = geo.Element("city").Value,
State = geo.Element("state").Value,
Country = geo.Element("country").Value,
Station = geo.Element("icao").Value
Lat = geo.Element("lat").Value,
Lon = geo.Element("lon").Value
};