2010-12-02 4 views
0

Я работаю на веб-сайте, где мне нужна карта google, чтобы отображать позиции членов сайта.XML-документ - ссылка на объект не установлена ​​на экземпляр объекта

Однако у меня возникли проблемы с получением данных из возвращаемого XML-документа при использовании службы геокодирования HTTP. Когда я помещаю строку в браузер, она возвращает 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, пробираясь через элементы сайта.

Большое спасибо!

Все самое лучшее,

Бо

Edit: К сожалению, я забыл вставить, как я получаю значения! ;)

+0

Пожалуйста, покажите нам остальную часть кода. – SLaks 2010-12-02 18:24:09

+0

Отредактировано мое сообщение - пропустил несколько строк кода :) Извините за это! – bomortensen 2010-12-02 18:26:55

ответ

1

Как вы получили 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 чувствителен к регистру.

4

Заменить "GeoCodeResponse" с "GeocodeResponse"

Пожалуйста, обратите внимание, что капитал C в код неверен. Xml чувствителен к регистру.

Смежные вопросы