XML-документ - ссылка на объект не установлена ​​для экземпляра объекта - PullRequest
0 голосов
/ 02 декабря 2010

Я работаю над сайтом, на котором мне нужна карта Google для отображения позиций участников сайта.

Однако у меня возникли некоторые проблемы с получением данных из возвращенного XML-документа при использовании службы HTTP Geocode. Когда я помещаю строку в браузер, он прекрасно возвращает XML, а если я устанавливаю textbox.Text для документов InnerText, он также отображается так, как должен. Но когда я хочу извлечь значения из узлов, он говорит, что ссылка на объект не установлена ​​на экземпляр объекта.

Я делаю это так:

string address = m.getProperty("adresse").Value.ToString();
string zip = m.getProperty("postNummer").Value.ToString();
string city = m.getProperty("by").Value.ToString();

XmlDocument doc = new XmlDocument();
doc.Load("http://maps.googleapis.com/maps/api/geocode/xml?address=" + zip + "+" + city + "+" + address + "+DK&sensor=true");

XmlNode latNode = doc.SelectSingleNode("GeoCodeResponse/result/geometry/location/lat/text()");
XmlNode lonNode = doc.SelectSingleNode("GeoCodeResponse/result/geometry/location/lng/text()");

// The error occurs when the code hits these:
string lat = latNode.Value;
string lon = lonNode.Value;

Я должен сообщить администратору, что я еще не так много работал с XML в C #, поэтому любая подсказка будет принята с благодарностью! :-) Следует также сказать, что приведенный выше код находится в цикле foreach, проходящем через членов сайта.

Заранее большое спасибо!

Всего наилучшего,

Бо

Редактировать: Извините, я забыл вставить, как я получаю значения! ;)

Ответы [ 2 ]

4 голосов
/ 02 декабря 2010

Замените «GeoCodeResponse» на «GeocodeResponse»

Обратите внимание, что заглавная буква C в коде неверна.Xml чувствителен к регистру.

1 голос
/ 02 декабря 2010

Как вы получили latNode и lonNode?Кажется, это те, которые являются нулевыми.

Так как вы делаете это в цикле, какой-либо из участников преуспевает?Возможно, вы не получаете доступ к некоторым адресам, поэтому узлы lat / long в документе могут отсутствовать?

На самом деле невозможно определить точную проблему из кода, который вы разместили.Используйте свой отладчик и пошагово пройдитесь по коду, чтобы понять, почему вам не назначается latNode.

Редактировать

Это работает:

XmlNode latNode = doc.SelectSingleNode("GeocodeResponse/result/geometry/location/lat/text()");
XmlNode lonNode = doc.SelectSingleNode("GeocodeResponse/result/geometry/location/lng/text()");

Вы немного набралипуть.«Код» в «GeocodeResponse» должен быть в нижнем регистре.XPath чувствителен к регистру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...