Проблема с linq to xml - PullRequest
       11

Проблема с linq to xml

0 голосов
/ 05 марта 2010

Возможно, мне не хватает чего-то очевидного, но в моем запросе Linq to xml я получаю пустую ошибку "Ссылка на объект не установлена ​​на экземпляр объекта".

Вот образец 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
                              };

Я смотрел на это весь день и много чего пробовал, но не повезло. Может ли кто-нибудь помочь этому плотному программисту?

Ответы [ 2 ]

1 голос
/ 05 марта 2010

city и все остальные значения находятся внутри станции и не являются прямыми потомками аэропорта.

Возможно, некоторые отступы проливают свет на проблему.

<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
                  };
0 голосов
/ 05 марта 2010

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
                   };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...