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>
<?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></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