Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / ASP.NET / Web Services / July 2006

Tip: Looking for answers? Try searching our database.

Parsing the data from a webservice

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
irishdudeinusa - 16 Jul 2006 15:53 GMT
Hello Everyone,

I have been working a webservice where I can use it in other
applications that I am working on. However, I am running into a problem
with the data returned and I was wondering if someone could help.

This is the code for the method that I call
<WebMethod()> Public Function GetZipCodes(ByVal iZipCode As Integer,
ByVal iMiles As Integer) As String

        Dim oDbConn As New clsDataAccess
        Dim sXmlData As String

        With oDbConn
            'Load the database connection string
            .ConnectionString =
ConfigurationSettings.AppSettings("ZipcodesDbConString")
            If .OpenDb Then
                .ResetParameters()
                .AddParameter("iZipCode", OleDb.OleDbType.Integer,
ParameterDirection.Input, iZipCode)
                .AddParameter("iMiles", OleDb.OleDbType.Integer,
ParameterDirection.Input, iMiles)
                'Execute Stored Procedure
                If .Execute(.genuSql.StoreProcSelect, "selZipCodeList")
Then
                    sXmlData = .Data_XML
                End If
                .CloseDb()
            End If

        End With
        oDbConn = Nothing
        Return sXmlData

    End Function

and code for .data_xml
 Public ReadOnly Property Data_XML() As String
        Get
            'Local variables
            Dim iCol As Integer
            Dim iRow As Integer
            Dim iColPost As Integer
            Dim sValue As String
            'Set it to the string Builder
            Dim sXml As stBuilder = New stBuilder

            Dim xmlDoc As New Xml.XmlDocument
            Dim xmlRootElem As Xml.XmlElement
            Dim xmlRow As Xml.XmlElement

            Try
                'Build the first part of the xml string
                xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0",
"UTF-8", "no"))
                xmlRootElem = xmlDoc.CreateElement("DATA")
                xmlDoc.AppendChild(xmlRootElem)
                'Datatable object
                With oDataTable
                    'Traverse through the rows in the table
                    For iRow = 0 To .Rows.Count - 1
                        'Reset the string every time for the
                        sValue = ""
                        'Traverse through the columns of the data row
                        xmlRow = xmlDoc.CreateElement("xmlRow")
                        For iCol = 0 To .Columns.Count - 1
                            'Increment this value by 1
                            iColPost = iCol + 1
                            'Build the xml row string
                            sValue = sValue + .Columns(iCol).ColumnName
+ "=" + """" + .Rows(iRow)(iCol).ToString + """" + " "

xmlRow.SetAttribute(.Columns(iCol).ColumnName, .Rows(iRow)(iCol).ToString)
                        Next
                        xmlRootElem.AppendChild(xmlRow)
                        ''Complete the row
                        'sValue = "<xmlRow " + sValue + " />"
                        ''Add it to the xml string
                        'sXml.Append(sValue)
                    Next
                End With
                Dim sXmlDoc As String
                sXmlDoc = xmlDoc.OuterXml.ToString()
                xmlDoc = Nothing
                xmlRootElem = Nothing
                xmlRow = Nothing
                ''Complete the xml string
                'sXml.Append("</DATA>")
                'Return the xml string back to the calling property or
module
                Return sXmlDoc.ToString
            Catch ex As Exception
                sErrorMsg = ex.Message
            End Try

        End Get
    End Property

This is how the data looks when I print it to screen

<?xml version="1.0" encoding="UTF-8" standalone="no"?><DATA><xmlRow
ZipCode="48809" /><xmlRow ZipCode="48815" /><xmlRow ZipCode="48881"
/><xmlRow ZipCode="48887" /><xmlRow ZipCode="49301" /><xmlRow
ZipCode="49302" /><xmlRow ZipCode="49306" /><xmlRow ZipCode="49311"
/><xmlRow ZipCode="49315" /><xmlRow ZipCode="49316" /><xmlRow
ZipCode="49317" /><xmlRow ZipCode="49319" /><xmlRow ZipCode="49321"
/><xmlRow ZipCode="49323" /><xmlRow ZipCode="49325" /><xmlRow
ZipCode="49331" /><xmlRow ZipCode="49333" /><xmlRow ZipCode="49335"
/><xmlRow ZipCode="49341" /><xmlRow ZipCode="49345" /><xmlRow
ZipCode="49348" /><xmlRow ZipCode="49351" /><xmlRow ZipCode="49355"
/><xmlRow ZipCode="49356" /><xmlRow ZipCode="49357" /><xmlRow
ZipCode="49401" /><xmlRow ZipCode="49418" /><xmlRow ZipCode="49426"
/><xmlRow ZipCode="49427" /><xmlRow ZipCode="49428" /><xmlRow
ZipCode="49429" /><xmlRow ZipCode="49430" /><xmlRow ZipCode="49435"
/><xmlRow ZipCode="49468" /><xmlRow ZipCode="49501" /><xmlRow
ZipCode="49502" /><xmlRow ZipCode="49503" /><xmlRow ZipCode="49504"
/><xmlRow ZipCode="49505" /><xmlRow ZipCode="49506" /><xmlRow
ZipCode="49507" /><xmlRow ZipCode="49508" /><xmlRow ZipCode="49509"
/><xmlRow ZipCode="49510" /><xmlRow ZipCode="49512" /><xmlRow
ZipCode="49514" /><xmlRow ZipCode="49515" /><xmlRow ZipCode="49516"
/><xmlRow ZipCode="49518" /><xmlRow ZipCode="49519" /><xmlRow
ZipCode="49523" /><xmlRow ZipCode="49525" /><xmlRow ZipCode="49528"
/><xmlRow ZipCode="49530" /><xmlRow ZipCode="49534" /><xmlRow
ZipCode="49544" /><xmlRow ZipCode="49546" /><xmlRow ZipCode="49548"
/><xmlRow ZipCode="49550" /><xmlRow ZipCode="49555" /><xmlRow
ZipCode="49560" /><xmlRow ZipCode="49588" /><xmlRow ZipCode="49599"
/></DATA>

however when I view the source of the page this is how it looks.

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><GetZipCodesResponse
xmlns="http://jcontrols.structureinteractive.com/siwebservice/siws"><GetZipCodesResult>
&lt;?xml

version="1.0" encoding="UTF-8"
standalone="no"?&gt;&lt;DATA&gt;&lt;xmlRow ZipCode="48809"
/&gt;&lt;xmlRow ZipCode="48815" /&gt;&lt;xmlRow ZipCode="48881"
/&gt;&lt;xmlRow ZipCode="48887" /&gt;&lt;xmlRow ZipCode="49301"
/&gt;&lt;xmlRow ZipCode="49302" /&gt;&lt;xmlRow ZipCode="49306"
/&gt;&lt;xmlRow ZipCode="49311" /&gt;&lt;xmlRow ZipCode="49315"
/&gt;&lt;xmlRow ZipCode="49316" /&gt;&lt;xmlRow ZipCode="49317"
/&gt;&lt;xmlRow ZipCode="49319" /&gt;&lt;xmlRow ZipCode="49321"
/&gt;&lt;xmlRow ZipCode="49323" /&gt;&lt;xmlRow ZipCode="49325"
/&gt;&lt;xmlRow ZipCode="49331" /&gt;&lt;xmlRow ZipCode="49333"
/&gt;&lt;xmlRow ZipCode="49335" /&gt;&lt;xmlRow ZipCode="49341"
/&gt;&lt;xmlRow ZipCode="49345" /&gt;&lt;xmlRow ZipCode="49348"
/&gt;&lt;xmlRow ZipCode="49351" /&gt;&lt;xmlRow ZipCode="49355"
/&gt;&lt;xmlRow ZipCode="49356" /&gt;&lt;xmlRow ZipCode="49357"
/&gt;&lt;xmlRow ZipCode="49401" /&gt;&lt;xmlRow ZipCode="49418"
/&gt;&lt;xmlRow ZipCode="49426" /&gt;&lt;xmlRow ZipCode="49427"
/&gt;&lt;xmlRow ZipCode="49428" /&gt;&lt;xmlRow ZipCode="49429"
/&gt;&lt;xmlRow ZipCode="49430" /&gt;&lt;xmlRow ZipCode="49435"
/&gt;&lt;xmlRow ZipCode="49468" /&gt;&lt;xmlRow ZipCode="49501"
/&gt;&lt;xmlRow ZipCode="49502" /&gt;&lt;xmlRow ZipCode="49503"
/&gt;&lt;xmlRow ZipCode="49504" /&gt;&lt;xmlRow ZipCode="49505"
/&gt;&lt;xmlRow ZipCode="49506" /&gt;&lt;xmlRow ZipCode="49507"
/&gt;&lt;xmlRow ZipCode="49508" /&gt;&lt;xmlRow ZipCode="49509"
/&gt;&lt;xmlRow ZipCode="49510" /&gt;&lt;xmlRow ZipCode="49512"
/&gt;&lt;xmlRow ZipCode="49514" /&gt;&lt;xmlRow ZipCode="49515"
/&gt;&lt;xmlRow ZipCode="49516" /&gt;&lt;xmlRow ZipCode="49518"
/&gt;&lt;xmlRow ZipCode="49519" /&gt;&lt;xmlRow ZipCode="49523"
/&gt;&lt;xmlRow ZipCode="49525" /&gt;&lt;xmlRow ZipCode="49528"
/&gt;&lt;xmlRow ZipCode="49530" /&gt;&lt;xmlRow ZipCode="49534"
/&gt;&lt;xmlRow ZipCode="49544" /&gt;&lt;xmlRow ZipCode="49546"
/&gt;&lt;xmlRow ZipCode="49548" /&gt;&lt;xmlRow ZipCode="49550"
/&gt;&lt;xmlRow ZipCode="49555" /&gt;&lt;xmlRow ZipCode="49560"
/&gt;&lt;xmlRow ZipCode="49588" /&gt;&lt;xmlRow ZipCode="49599"
/&gt;&lt;/DATA&gt;</GetZipCodesResult></GetZipCodesResponse></soap:Body></soap:Envelope>

This is the code I am using to parse the data out

set root = xmldom.documentElement
        set orderheaders =
root.selectNodes("/GetZipCodesResult/GetZipCodesResponse/DATA")
       
        response.write orderheaders.length
        for counter=0 to orderheaders.length-1
           
            for each header in orderheaders.item(counter).childnodes
            response.write header.nodename
                    select case header.nodename
                        case "zipcode"
                            response.Write "<br>"
                            for i=0 to header.childnodes.length -1
                                response.Write  header.childnodes(i).nodename & "=" &
header.childnodes(i).text  & "<BR>"
                            next
                        case else
                            response.write "jrd"
                           
                    end select
               
            next
        next
Pablo Cibraro - 17 Jul 2006 15:23 GMT
Hi,

You should return a xml complex type instead of a string. The web service is
encoding the xml because you are using a string parameter.

For example,

Imports System.Xml.Serialization

<XmlRoot("xmlRow")> _

Public Class XmlRow

<XmlAttribute("ZipCode")> _

Public ZipCode As String

End Class

And your web service should return an array of XmlRow classes,

<WebMethod()> Public Function GetZipCodes(ByVal iZipCode As Integer,
ByVal iMiles As Integer) As XmlRow()

In addition, you can parse the data returned from the database in a string
as an array of XmlRow classes using the XmlSerializer class.

Regards.
Pablo Cibraro
http://weblogs.asp.net/cibrax
[MVP - Connected Systems Developer]

> Hello Everyone,
>
[quoted text clipped - 191 lines]
> next
> next
irishdudeinusa - 28 Jul 2006 04:58 GMT
Pablo

Short of writing the code I was wondering if you could explain this a
little more to me. What I am doing is calling the service from a non
asp.net page and when looking the suggestion down below I was not sure
how I could make this into an array.

What I enter into my service is a zip code and the mile range and this
pulls back a list of zipcodes that are within the mile range of the zip
code that I entered.

If you have code examples that demostrates what you mentioned down below
I would really appreciated it. thanks.

> Hi,
>
[quoted text clipped - 223 lines]
>> next
>> next

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.