1

I'm using google's Geocoding API but it return XML and I do not know how to parse it.

I'm trying to get the latitude in the XML document that looks like this...

<GeocodeResponse>
 <status>OK</status>
 <result>
  <type>street_address</type>
  <formatted_address>1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA</formatted_address>
  <address_component>
   <long_name>1600</long_name>
   <short_name>1600</short_name>
   <type>street_number</type>
  </address_component>
  <address_component>
   <long_name>Amphitheatre Pkwy</long_name>
   <short_name>Amphitheatre Pkwy</short_name>
   <type>route</type>
  </address_component>
  <address_component>
   <long_name>Mountain View</long_name>
   <short_name>Mountain View</short_name>
   <type>locality</type>
   <type>political</type>
  </address_component>
  <address_component>
   <long_name>San Jose</long_name>
   <short_name>San Jose</short_name>
   <type>administrative_area_level_3</type>
   <type>political</type>
  </address_component>
  <address_component>
   <long_name>Santa Clara</long_name>
   <short_name>Santa Clara</short_name>
   <type>administrative_area_level_2</type>
   <type>political</type>
  </address_component>
  <address_component>
   <long_name>California</long_name>
   <short_name>CA</short_name>
   <type>administrative_area_level_1</type>
   <type>political</type>
  </address_component>
  <address_component>
   <long_name>United States</long_name>
   <short_name>US</short_name>
   <type>country</type>
   <type>political</type>
  </address_component>
  <address_component>
   <long_name>94043</long_name>
   <short_name>94043</short_name>
   <type>postal_code</type>
  </address_component>
  <geometry>
   <location>
    <lat>37.4217550</lat>
    <lng>-122.0846330</lng>
   </location>
   <location_type>ROOFTOP</location_type>
   <viewport>
    <southwest>
     <lat>37.4188514</lat>
     <lng>-122.0874526</lng>
    </southwest>
    <northeast>
     <lat>37.4251466</lat>
     <lng>-122.0811574</lng>
    </northeast>
   </viewport>
  </geometry>
 </result>
</GeocodeResponse>

How can I do that? This is as far as I could get to.

string baseURL = "https://maps.googleapis.com/maps/api/geocode/xml?";
string fullURL = baseURL  + "address=" + address + "&sensor=false";
Uri ServivrUri = new Uri(fullURL);
WebClient proxy = new WebClient();
byte[] abc = proxy.DownloadData(ServivrUri);

MemoryStream stream = new MemoryStream(abc);
XmlDocument xDocument = new XmlDocument();
xDocument.Load(stream);
4
  • 4
    Try XDocument, it's a bit easier to use than XmlDocument. Commented Oct 14, 2013 at 22:19
  • Use XPath. Navigating is SOO much easier. Commented Oct 14, 2013 at 22:30
  • @CoryNelson could you point me to some examples. i've tried looking all over the web on how to do this but i just can't seem to put anything together. Commented Oct 14, 2013 at 22:34
  • 1
    See LINQ to XML Commented Oct 14, 2013 at 22:40

1 Answer 1

2

You should use XDocument instead of XmlDocument

var xDocument = XDocument.Load(stream);

Then you can use linqToXml

For instance, for getting the latitude, you can try this

var latitude = xDocument.Descendants("geometry").Descendants("location")
                        .First().Element("lat").Value;
Sign up to request clarification or add additional context in comments.

3 Comments

VS can't find the reference to Descendants(). Is it in the System.Xml.Linq namspace? @Esteban Elverdin
Sorry, I didn't notice you were using XmlDocument, I updated the answer
Yeah i was catching onto that from Cory's comments. thank you i'll try this out.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.