Extract data from xml in

Posted on 2013-06-06
Last Modified: 2013-08-21
I am new to working with XML and need some help understanding how to cycle through an XML file and extract the data that I need in visual studio . net.  Below is XML containing geocode data that I need to extract.  In this case I need to extract the latitude an longitude tags <lat>33.7713652</lat> <lng>-84.3719365</lng> into variables Lat and Lng.

Thanks in advance for your help.

Here is the xml data:

<?xml version="1.0" encoding="UTF-8"?>
-<GeocodeResponse> <status>OK</status> -<result> <type>street_address</type> <formatted_address>460 North Avenue Northeast, Atlanta, GA 30308, USA</formatted_address> -<address_component> <long_name>460</long_name> <short_name>460</short_name> <type>street_number</type> </address_component> -<address_component> <long_name>North Avenue Northeast</long_name> <short_name>North Avenue NE</short_name> <type>route</type> </address_component> -<address_component> <long_name>Old Fourth Ward</long_name> <short_name>Old Fourth Ward</short_name> <type>neighborhood</type> <type>political</type> </address_component> -<address_component> <long_name>Atlanta</long_name> <short_name>Atlanta</short_name> <type>locality</type> <type>political</type> </address_component> -<address_component> <long_name>Atlanta</long_name> <short_name>Atlanta</short_name> <type>administrative_area_level_3</type> <type>political</type> </address_component> -<address_component> <long_name>Fulton</long_name> <short_name>Fulton</short_name> <type>administrative_area_level_2</type> <type>political</type> </address_component> -<address_component> <long_name>Georgia</long_name> <short_name>GA</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>30308</long_name> <short_name>30308</short_name> <type>postal_code</type> </address_component> -<geometry> -<location> <lat>33.7713652</lat> <lng>-84.3719365</lng> </location> <location_type>ROOFTOP</location_type> -<viewport> -<southwest> <lat>33.7700162</lat> <lng>-84.3732855</lng> </southwest> -<northeast> <lat>33.7727142</lat> <lng>-84.3705875</lng> </northeast> </viewport> </geometry> </result> -<result> <type>street_address</type> <formatted_address>460 North Road, Douglas, NE 68344, USA</formatted_address> -<address_component> <long_name>460</long_name> <short_name>460</short_name> <type>street_number</type> </address_component> -<address_component> <long_name>North Road</long_name> <short_name>N Rd</short_name> <type>route</type> </address_component> -<address_component> <long_name>Douglas</long_name> <short_name>Douglas</short_name> <type>locality</type> <type>political</type> </address_component> -<address_component> <long_name>Hendricks</long_name> <short_name>Hendricks</short_name> <type>administrative_area_level_3</type> <type>political</type> </address_component> -<address_component> <long_name>Otoe</long_name> <short_name>Otoe</short_name> <type>administrative_area_level_2</type> <type>political</type> </address_component> -<address_component> <long_name>Nebraska</long_name> <short_name>NE</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>68344</long_name> <short_name>68344</short_name> <type>postal_code</type> </address_component> -<geometry> -<location> <lat>40.5918115</lat> <lng>-96.4191915</lng> </location> <location_type>RANGE_INTERPOLATED</location_type> -<viewport> -<southwest> <lat>40.5904695</lat> <lng>-96.4205405</lng> </southwest> -<northeast> <lat>40.5931675</lat> <lng>-96.4178426</lng> </northeast> </viewport> -<bounds> -<southwest> <lat>40.5918115</lat> <lng>-96.4191916</lng> </southwest> -<northeast> <lat>40.5918255</lat> <lng>-96.4191915</lng> </northeast> </bounds> </geometry> <partial_match>true</partial_match> </result>
Question by:toddpotter
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
LVL 75

Expert Comment

by:käµfm³d 👽
ID: 39227206
I see multiple <lat> and <lng> nodes in that sample. So which ones do you need?

Author Comment

ID: 39227225
Multiple get returned so I would go with the 1st occurance.
LVL 75

Expert Comment

by:käµfm³d 👽
ID: 39227240
OK, but there are multiple parents. Do you need the long/lat that is within the <location> node, the <southeast> node, the <southwest> node, etc., etc.

Author Comment

ID: 39227271
Sorry.  For now, the long/lat within the <location> would be sufficient.
LVL 14

Accepted Solution

frankhelk earned 500 total points
ID: 39314681
Hmmm - if I copy/paste the code into a file and open it with IE or Firefox (both present XML in nice, readable form) they tell me that the data is not well formed.

That way standard procedures which are built in into the .NET runtime will fail on it.

Nonetheless, here's some code you might use as inspiration. I've stripped down some of my more complicated code, but I havn't tested that afterwards. So this is more a guideline than a working example. The classes involved have much more bells and whistles, so I recommend to have a look at the VS help for 'em.

The VB.NET example (built some years ago with VS2005) fetches some XML text out of a HTTP server and extracts some data. The result is returned as string, with all fetched items sparated by semicolons. But be aware that these classes need well formed xml to work with.

Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Imports System.Xml

    Public Function GetSthFromXML(ByVal node As String) As String
        Dim xmlDoc As XmlDocument
        Dim xmlnode As XmlNode
        Dim xmlnodeList As XmlNodeList

        Dim url As String
        Dim Response As String
        Dim dWeb As New WebClient

        GetSthFromXML = ""

        xmlDoc = New XmlDocument

        If node <> "" Then

            url = "http://" & node & "/someurl"

            With dWeb
                .Headers = New Net.WebHeaderCollection
                .Encoding = Encoding.Default
                .CachePolicy = New Cache.RequestCachePolicy(Cache.RequestCacheLevel.NoCacheNoStore)
            End With

                Response = dWeb.DownloadString(url)
            Catch ex As Exception
                'Eror - empty response
                Return ""
            End Try

            Throw New System.Exception("GetSthFromXML needs a node name")
        End If

        xmlnodeList = xmlDoc.SelectNodes("//NodeType")

        For Each xmlnode In xmlnodeList
            If GetSthFromXML.Length > 0 Then GetSthFromXML = GetSthFromXML & ";"
            GetSthFromXML = GetSthFromXML & xmlnode.SelectSingleNode("InnerNode").InnerText 

    End Function

Open in new window


Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Today is the age of broadband.  More and more people are going this route determined to experience the web and it’s multitude of services as quickly and painlessly as possible. Coupled with the move to broadband, people are experiencing the web via …
Parsing a CSV file is a task that we are confronted with regularly, and although there are a vast number of means to do this, as a newbie, the field can be confusing and the tools can seem complex. A simple solution to parsing a customized CSV fi…
There's a multitude of different network monitoring solutions out there, and you're probably wondering what makes NetCrunch so special. It's completely agentless, but does let you create an agent, if you desire. It offers powerful scalability …
Monitoring a network: why having a policy is the best policy? Michael Kulchisky, MCSE, MCSA, MCP, VTSP, VSP, CCSP outlines the enormous benefits of having a policy-based approach when monitoring medium and large networks. Software utilized in this v…

734 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question