我正在一个网站上工作,我需要一个谷歌地图来显示网站成员的位置。
但是,在使用HTTP地理编码服务时,从返回的XML文档中获取数据时遇到了一些麻烦。当我将字符串放入浏览器时,它返回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;
我必须管理员,我还没有在C#中使用XML那么多,所以任何提示都将非常感谢! :-)还应该说上面的代码是在foreach循环中,循环遍历网站的成员。
提前多多感谢!
一切顺利,
博
编辑:对不起,我忘记了如何获取值! ;)
答案 0 :(得分:4)
将“GeoCodeResponse”替换为“GeocodeResponse”
请注意代码中的大写字母C不正确。 Xml区分大小写。
答案 1 :(得分: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”中的“code”应为小写。 XPath区分大小写。