WonderingWhy
asked on
Processing an XML file in ASP
Hi All
I'm attempting to process an XML file for storing into a database. I'm using a sample xml file (attached) which contains some customer data along with a list of vehicles that customer owns.
The customer can own between 1 and 3 vehicles (for the purpose of this example)
I've managed to output the data on screen, but now I need to store the data as variables. I've tried declaring each variable in my code - but as there are duplicates (when more than one vehicle exists) it is failing.
Is there anyway of numbering the returned data? i.e. First returned vehicle would be Make1, Model1 and the next would be Make2, Model2 etc? If not - is there any alternative solution?
Many thanks for your help.
I'm attempting to process an XML file for storing into a database. I'm using a sample xml file (attached) which contains some customer data along with a list of vehicles that customer owns.
The customer can own between 1 and 3 vehicles (for the purpose of this example)
I've managed to output the data on screen, but now I need to store the data as variables. I've tried declaring each variable in my code - but as there are duplicates (when more than one vehicle exists) it is failing.
Is there anyway of numbering the returned data? i.e. First returned vehicle would be Make1, Model1 and the next would be Make2, Model2 etc? If not - is there any alternative solution?
Many thanks for your help.
********** This is my sample xml
<?xml version="1.0" encoding="utf-8" ?>
<Remotesale>
<Customer>
<Title>Mr</Title>
<Forename>Craig</Forename>
<Surname>Bloggs</Surname>
</Customer>
<Vehicles>
<Vehicle>
<Make>Ford</Make>
<Model>Escort</Model>
</Vehicle>
<Vehicle>
<Make>Vauxhall</Make>
<Model>Astra</Model>
</Vehicle>
</Vehicles>
</Remotesale>
********** and this is my ASP code
<%@ Language=VBScript %>
<%Option Explicit%>
<HTML>
<HEAD>
<TITLE>Processing file</TITLE>
</HEAD>
<%
Dim xmlDoc
Dim xmlRoot
Dim xmlPNode
Dim xmlNode
Dim strDoc
Set xmlDoc = Server.CreateObject("Microsoft.xmldom")
xmlDoc.async = False
xmlDoc.load(Server.MapPath("sample.xml"))
Set xmlRoot = xmlDoc.documentElement
For Each xmlPNode In xmlRoot.childNodes
If xmlPNode.childNodes.length = 0 Then
strDoc = strDoc & _
"<I>No data</I>"
'Return failed message to MSM?
Else
strDoc = strDoc & "<div>"
For Each xmlNode In xmlPNode.childNodes
'Dim xmlNode.nodeName
'xmlNode.nodeName = xmlNode.text
strDoc = strDoc & _
"<B>" & xmlNode.nodeName & ":</B>" & _
xmlNode.text + "<br />"
Next
End If
strDoc = strDoc & "</div>"
Next
Response.Write strDoc
%>
</BODY>
</HTML>
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
<%@ Language=VBScript %>
<%Option Explicit%>
<HTML>
<HEAD>
<TITLE>Processing file</TITLE>
</HEAD>
<%
Dim xmlDoc
Dim xmlRoot
Dim xmlPNode
Dim xmlNode
Dim strDoc
'Set xmlDoc = Server.CreateObject("Microsoft.xmldom")
Set xmlDoc = Server.CreateObject("MSXML2.DOMDocument.3.0")
xmlDoc.async = False
xmlDoc.load(Server.MapPath("panosms.xml"))
Dim title, forename, surname, vehicles
'save customer info into variables
title = xmlDoc.selectSingleNode("/Remotesale/Customer/Title").text
forename = xmlDoc.selectSingleNode("/Remotesale/Customer/Forename").text
surname = xmlDoc.selectSingleNode("/Remotesale/Customer/Surname").text
'save the vehicles onto an array of node objects.
Set vehicles = xmlDoc.selectNodes("/Remotesale/Vehicles/Vehicle")
Dim vehicle1make, vehicle1model, vehicle2make, vehicle2model
vehicle1make = vehicles(0).selectSingleNode("Make").text
vehicle1model= vehicles(0).selectSingleNode("Model").text
vehicle2make = vehicles(1).selectSingleNode("Make").text
vehicle2model= vehicles(1).selectSingleNode("Model").text
'Write the customer info
Response.Write title & " " & forename & " " & surname
'Print the vehicle data individually
Response.Write "<div>" & vehicle1make & " " & vehicle1model & "</div>"
Response.Write "<div>" & vehicle2make & " " & vehicle2model & "</div>"
%>
</BODY>
</HTML>
ASKER
Hi Hielo
Thanks so much for your help. Points awarded.
The second solution above didn't work fully as if only 1 vehicle was included in the XML feed, it would fail - and likewise, if 3 vehicles were included, it would also fail.
Here is the solution...
Thanks so much for your help. Points awarded.
The second solution above didn't work fully as if only 1 vehicle was included in the XML feed, it would fail - and likewise, if 3 vehicles were included, it would also fail.
Here is the solution...
<%@ Language=VBScript %>
<%Option Explicit%>
<HTML>
<HEAD>
<TITLE>Processing file</TITLE>
</HEAD>
<%
Dim xmlDoc
Dim xmlRoot
Dim xmlPNode
Dim xmlNode
Dim strDoc
'Set xmlDoc = Server.CreateObject("Microsoft.xmldom")
Set xmlDoc = Server.CreateObject("MSXML2.DOMDocument.3.0")
xmlDoc.async = False
xmlDoc.load(Server.MapPath("sample.xml"))
Dim title, forename, surname, vehicles
'save customer info into variables
title = xmlDoc.selectSingleNode("/Remotesale/Customer/Title").text
forename = xmlDoc.selectSingleNode("/Remotesale/Customer/Forename").text
surname = xmlDoc.selectSingleNode("/Remotesale/Customer/Surname").text
'save the vehicles onto an array of node objects.
Set vehicles = xmlDoc.selectNodes("/Remotesale/Vehicles/Vehicle")
'Write the customer info
Response.Write title & " " & forename & " " & surname & "<br />"
'Print the vehicle data individually
'Response.Write "<div>" & vehicles(0).selectSingleNode("Make").text & " " & vehicles(0).selectSingleNode("Model").text & "</div>"
'Response.Write "<div>" & vehicles(1).selectSingleNode("Make").text & " " & vehicles(1).selectSingleNode("Model").text & "</div>"
'or iterate through array
Dim vehicleCounter
vehicleCounter = 1001
Dim Vehicle1Make, Vehicle1Model
Dim Vehicle2Make, Vehicle2Model
Dim Vehicle3Make, Vehicle3Model
Dim v
For Each v in vehicles
If vehicleCounter = 1001 then
Vehicle1Make = v.selectSingleNode("Make").text
Vehicle1Model = v.selectSingleNode("Model").text
ElseIf vehicleCounter = 1002 then
Vehicle2Make = v.selectSingleNode("Make").text
Vehicle2Model = v.selectSingleNode("Model").text
ElseIf vehicleCounter = 1003 then
Vehicle3Make = v.selectSingleNode("Make").text
Vehicle3Model = v.selectSingleNode("Model").text
End If
vehicleCounter = vehicleCounter + 1
Next
Response.Write Vehicle1Make & " " & Vehicle1Model & "<br />"
If Vehicle2Make <> "" then Response.Write Vehicle2Make & " " & Vehicle2Model & "<br />"
If Vehicle3Make <> "" then Response.Write Vehicle3Make & " " & Vehicle3Model & "<br />"
%>
</BODY>
</HTML>
ASKER
(vehicle1make, vehicle1model, vehicle2make, vehicle2model, etc etc)
Thanks