我正在向GoogleMaps API发出http请求,下面列出了我回来的XML。
我试图将LAT和LON值分配给字符串,但我得到了一个"空引用异常"你调用的对象是空的。在线"字符串lat = childnode ...
我的尝试是基于question/answer
当我查看调试器中的nodeList时,XML中的所有细节都在结果视图中。
任何想法我做错了什么?
以下是问题代码。
// Parse the XML
XmlDocument doc = new XmlDocument();
doc.LoadXml(responseFromServer);
XmlNodeList nodeList = doc.SelectNodes("/*[local-name() = 'GeocodeResponse']/*[local-name() = 'result']");
if (nodeList != null)
{
foreach (XmlNode childNode in nodeList)
{
string lat = childNode.SelectSingleNode("//*[local-name() = 'geometry/location/lat']").InnerText;
string lon = childNode.SelectSingleNode("//*[local-name() = 'geometry/location/lon']").InnerText;
string locationType = childNode.SelectSingleNode("//*[local-name() = 'geometry/location_type']").InnerText;
}
}
以下是Google Maps Returns
的XML示例改变地址以保护无辜者:)
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<GeocodeResponse>
<status>OK</status>
<result>
<type>street_address</type>
<formatted_address>48 Johnson Ave, Wiley Park NSW 2195, Australia</formatted_address>
<address_component>
<long_name>48</long_name>
<short_name>48</short_name>
<type>street_number</type>
</address_component>
<address_component>
<long_name>Johnson Avenue</long_name>
<short_name>Johnson Ave</short_name>
<type>route</type>
</address_component>
<address_component>
<long_name>Wiley Park</long_name>
<short_name>Wiley Park</short_name>
<type>locality</type>
<type>political</type>
</address_component>
<address_component>
<long_name>Canterbury City Council</long_name>
<short_name>Canterbury</short_name>
<type>administrative_area_level_2</type>
<type>political</type>
</address_component>
<address_component>
<long_name>New South Wales</long_name>
<short_name>NSW</short_name>
<type>administrative_area_level_1</type>
<type>political</type>
</address_component>
<address_component>
<long_name>Australia</long_name>
<short_name>AU</short_name>
<type>country</type>
<type>political</type>
</address_component>
<address_component>
<long_name>2195</long_name>
<short_name>2195</short_name>
<type>postal_code</type>
</address_component>
<geometry>
<location>
<lat>-33.9279554</lat>
<lng>151.0688625</lng>
</location>
<location_type>ROOFTOP</location_type>
<viewport>
<southwest>
<lat>-33.9293044</lat>
<lng>151.0675135</lng>
</southwest>
<northeast>
<lat>-33.9266064</lat>
<lng>151.0702115</lng>
</northeast>
</viewport>
</geometry>
<partial_match>true</partial_match>
<place_id>ChIJkUHpDOe7EmsRGapwFB6s9Dw</place_id>
</result>
</GeocodeResponse>
编辑: 在我看来,我还没有指定我想要的节点的路径。 不知道我应该改变什么。
答案 0 :(得分:0)
使用更简单的XPath调用:
XmlDocument doc = new XmlDocument();
doc.Load("google.xml");
XmlNodeList nodeList = doc.SelectNodes("/*[local-name() = 'GeocodeResponse']/*[local-name() = 'result']");
if (nodeList != null)
{
foreach (XmlNode childNode in nodeList)
{
string lat = childNode.SelectSingleNode("geometry/location/lat").InnerText;
string lon = childNode.SelectSingleNode("geometry/location/lng").InnerText;
string locationType = childNode.SelectSingleNode("geometry/location_type").InnerText;
}
}
另外......经度节点是&#39; lgn&#39;不是lon