The webservice I was using to get address and geo-code data has changed their XML results format and label/node names.
I can't seem to get the this code to properly parse/read the new nodes (likley because I don't know how to properly identify the node name/child.node name).
Any help would be greatly appreciated.
Notes:
The function that calls the webservice is named GeoCodeFunction
The IF/THEN to check for 'precision' needs to be changed to a more simple check for 'quality' > 85
The ZipCode variable needs to now = XML reslut: 'uzip'
The ZipCodePlusFour variable needs to now = XML result: 'postal'
You'll see a funtion named GetRecordSet in the code - it query's the DB
I would be DELIGHTED to pay someone to help me with this...
but I'm also happy to try to learn from you folks how to properly read XML node results into variables, and do it here so that others can follow and learn from my ignorance.
Thanks.
- Michael
------------------------------------------------------------------
This asp page (below) is called after an HTML form submission
which writes user data to the DB and:
a) opens a DB connection, checks a website visitor's login status, gets their userID
b) retreives user's data (address) from a MySQL DB table, name: 'users'
c) if exists, sends the address data to a webservice (external function: 'geocode')
d) reads the returned XML results
e) updates the database table with the new address data
f) redirects the user to another html/asp page
------------------------------------------------------------------
<!--#include file="./include/functions.asp"-->
Code ASP:<% call openDB call checkLogin if not session("userType") = "P" then response.redirect "sitter_main.asp" idUser=session("idUser") set oUser=getRecordSet("SELECT * FROM Users WHERE idUser=" & idUser) if not isnull(oUser("zipCode")) and not isEmpty(oUser("zipCode")) then on error resume next parsedXML=GeoCode(oUser("streetAddress"), oUser("city"), oUser("state"), oUser("zipCode")) on error goto 0 if err.number=0 and Len(ParseTag("Latitude",parsedXML)) > 0 then if instr(1,parsedXML,"precision=""address""") > 1 or instr(1,parsedXML,"precision=""street""") > 1 then ExecuteSQL "Update Users SET " & _ "streetaddress=""" & ParseTag("Address",parsedXML) & """," & _ "city=""" & ParseTag("City",parsedXML) & """," & _ "zipCode=""" & Left(ParseTag("Zip",parsedXML),5) & """," & _ "zipCodePlusFour=""" & ParseTag("Zip",parsedXML) & """," & _ "Latitude=" & ParseTag("Latitude",parsedXML) & "," & _ "Longitude=" & ParseTag("Longitude",parsedXML) & "," & _ "`status`=""A""," & _ "Comments="""" " & _ "WHERE idUser=" & idUser 'active' elseif instr(1,parsedXML,"precision=""zip""") > 1 then ExecuteSQL "Update Users SET " & _ "zipCode=""" & Left(ParseTag("Zip",parsedXML),5) & """," & _ "zipCodePlusFour=""" & ParseTag("Zip",parsedXML) & """," & _ "Latitude=" & ParseTag("Latitude",parsedXML) & "," & _ "Longitude=" & ParseTag("Longitude",parsedXML) & "," & _ "Comments=""""," & _ "`status`=""E"" WHERE idUser=" & idUser 'active' end if else if Len(ParseTag("Zip",parsedXML)) = 0 then ExecuteSQL "Update Users SET " & _ "`Comments`=""" & ParseTag("Message",parsedXML) & "<br>" & validSQL(parsedXML,"S") & """," & _ "`status`=""E"",Latitude=NULL,Longitude=NULL WHERE idUser=" & idUser else ExecuteSQL "Update Users SET " & _ "streetaddress=""" & ParseTag("Address",parsedXML) & """," & _ "city=""" & ParseTag("City",parsedXML) & """," & _ "zipCode=""" & Left(ParseTag("Zip",parsedXML),5) & """," & _ "zipCodePlusFour=""" & ParseTag("Zip",parsedXML) & """," & _ "`status`=""E"",Latitude=NULL,Longitude=NULL WHERE idUser=" & idUser end if end if end if response.write "<p />" response.write parsedXML response.redirect "parent_main.asp" call closeDB %>
------------------------------------------------------------------
These are the new webservice XML results and node names:
------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8" ?>
- <ResultSet version="1.0">
<Error>0</Error>
<ErrorMessage>No error</ErrorMessage>
<Quality>87</Quality> (replacement for 'precision - different values!)
- <Result>
<quality>87</quality> (was 'precision' - different values!)
<latitude>41.362040</latitude> (was 'Latitude')
<longitude>-81.359281</longitude> (was 'Longitude')
<line1>1234 Any St</line1> (was 'Address')
<postal>44123-1234</postal> (was 'Zip')
<city>Any Town</city> (was 'City')
<uzip>44123</uzip> (was 'Zip' - truncated, left, 5)
</Result>
</ResultSet>
------------------------------------------------------------------
And here is the external function that submits to the webservice:
------------------------------------------------------------------
Code ASP:Function GeoCode(street, city, state, zipcode) set objDocXML = Server.CreateObject("MSXML2.DomDocument") set objXMLHTTP = Server.CreateObject("Msxml2.XMLHTTP.3.0") set objDocXML = Server.CreateObject("MSXML2.DOMDocument") Dim XMLresponse,i Dim webXML Dim webService Dim ITSArray,ITSReturn webService = "http://where.yahooapis.com/geocode?&appid=[appid]?&location="&street="+street+"&city="+city+"&state="+state+"&zip="+zipcode" objXMLHTTP.Open "post", webService, False objXMLHTTP.send payload XMLresponse = objXMLHTTP.responseText objDocXML.loadXML (XMLresponse) GeoCode=objDocXML.xml End Function
------------------------------------------------------------------
Correct Mapping of new XML nodes to Database Fields:
------------------------------------------------------------------
XML RESULT Database Field
--------------------------------------------
<quality> (does not exist)
<line1> streetAddress
<city> city
<statecode> state
<uzip> zipCode
<postal> zipCodePlusFour
<latitude> Latitude
<longitude> Longitude
<ErrorMessage> comments
------------------------------------------------------------------
Detailed information on the webservice can be found here:
http://developer.yahoo.com/geo/placefinder/
------------------------------------------------------------------



Reply With Quote

Bookmarks