HI,
I am trying to write a script that will convert an XML file with details of many Cars into a CSV file per car. I have managed to get it to work for one vehicle at a time by specifying which vehicle tag to use.
I would like to process the whole file at once. i thought by using a 'foreach' statement, but i cannot work out how to do this.
Here is the code i have that will work for one vehicle,
#!/usr/bin/perl
use XML::Simple;
######XML PARSE##########
$xml = 'e:\cars\input.xml';
$config = XMLin($xml);
$exportid = "$config->{Header}->{ExportID}";
$numveh = "$config->{Summary}->{NumberOfVehicles}";
$memid = "$config->{Header}->{MemberID}";
$auctionid = "$config->{Vehicle}[0]->{AuctionID}";
$make = "$config->{Vehicle}[0]->{Manufacturer}";
$model = "$config->{Vehicle}[0]->{Model}";
$reg = "$config->{Vehicle}[0]->{RegNo}";
$year = "$config->{Vehicle}[0]->{RegYear}";
$colour = "$config->{Vehicle}[0]->{Colour}";
$fueltype = "$config->{Vehicle}[0]->{Fuel}";
$damage = "$config->{Vehicle}[0]->{Damage}";
$doors = "$config->{Vehicle}[0]->{Doors}";
$cc = "$config->{Vehicle}[0]->{CC}";
$mileage = "$config->{Vehicle}[0]->{Speedo}";
$transpeed = "$config->{Vehicle}[0]->{TransSpeed}";
$trantype = "$config->{Vehicle}[0]->{TransType}";
$trim = "$config->{Vehicle}[0]->{TrimLevel}";
$abicat = "$config->{Vehicle}[0]->{Cat}";
$reserve = "$config->{Vehicle}[0]->{Reserveprice}";
$vat = "$config->{Vehicle}[0]->{HasVAT}";
if ($vat eq 1){$hasvat = "Yes"} else {$hasvat = "No"};
$xmlstarts = "$config->{Vehicle}[0]->{Starts}";
if ($xmlstarts eq 1){$starts = "Starts"} else {$starts = "Does Not Sta
+rt"};
$xmldrives = "$config->{Vehicle}[0]->{Drives}";
if ($xmldrives eq 1){$drives = "Drives"} else {$drives = "Does Not Dri
+ve"};
$xmlkeys = "$config->{Vehicle}[0]->{Keys}";
if ($xmlkeys eq 1){$keyssupplied = "yes"} else {$keyssupplied = "No"};
$image1 = "$config->{Vehicle}[0]->{Images}->{Image_1}";
$image2 = "$config->{Vehicle}[0]->{Images}->{Image_2}";
$image3 = "$config->{Vehicle}[0]->{Images}->{Image_3}";
$image4 = "$config->{Vehicle}[0]->{Images}->{Image_4}";
$image5 = "$config->{Vehicle}[0]->{Images}->{Image_5}";
$image6 = "$config->{Vehicle}[0]->{Images}->{Image_6}";
$image7 = "$config->{Vehicle}[0]->{Images}->{Image_7}";
$image8 = "$config->{Vehicle}[0]->{Images}->{Image_8}";
$image9 = "$config->{Vehicle}[0]->{Images}->{Image_9}";
$image10 = "$config->{Vehicle}[0]->{Images}->{Image_10}";
$image11 = "$config->{Vehicle}[0]->{Images}->{Image_11}";
$image12 = "$config->{Vehicle}[0]->{Images}->{Image_12}";
###########Write CSV############
$opath = "e:/out/" ;
$ipath = "e:/in/" ;
$add='0';
$add2='xx.csv';
$add5='';
$lineno = 10;
$add5 = $exportid.$lineno ;
$add3 = $opath.$exportid.$lineno.$add2 ;
$add6 = "xx";
$mileage =~ tr/,//d ;
print "Content-type: text/html\n";
print "\n";
open (FILENAME,">$add3");
print FILENAME "Ref No,Make,Model,Trim,Vehicle Sub Class,Colour,Engine
+ Size,Fuel Type,Transmission,Year,Mileage,Registration No,Keys Suppli
+ed,Damage Report,VAT Applicable,Condition,FSH,ABI Category,Reserve,Ch
+assis No,Vehicle Source,Agent,Region,Vehicle Location,Source Name,Dat
+e Approved\n";
print FILENAME "$add5,$make,$model,$trim,$doors,$colour,$cc,$fueltype,
+$transpeed $trantypr,$year,$mileage,$reg,$keyssupplied,$damage,$hasva
+t,$starts $drives,No,$abicat,$reserve,na,$memid,$memid,$memid,$memid,
+$auctionid,na,\n";
close FILENAME ;
print "Done!";
A sample of the XML i am using
<?xml version="1.0"?>
<!--DMS Auction Export - Version 1.2-->
<root>
<Header>
<MemberID>005</MemberID>
<ExportID>9376</ExportID>
</Header>
<Vehicle>
<AuctionID>25020</AuctionID>
<VehicleID>155809</VehicleID>
<Ref>1477980</Ref>
<Manufacturer>FORD</Manufacturer>
<Model>FIESTA</Model>
<RegNo>MV04xxx</RegNo>
<RegYear>2004</RegYear>
<Colour>SILVER/BLACK</Colour>
<Fuel>Petrol</Fuel>
<Damage>FRONT AND O/S</Damage>
<Doors>3</Doors>
<Body>Hatchback</Body>
<CC>1388</CC>
<Speedo>39,260</Speedo>
<TransSpeed>5 Speed</TransSpeed>
<TransType>Manual</TransType>
<TrimLevel>LEATHER</TrimLevel>
<Engine></Engine>
<Cat>C</Cat>
<ReservePrice>886</ReservePrice>
<StartPrice>0</StartPrice>
<HasVAT>0</HasVAT>
<Keys>1</Keys>
<Starts>1</Starts>
<Drives>1</Drives>
<Stereo>0</Stereo>
<VINPlate>1</VINPlate>
<LogBook>0</LogBook>
<DateAuction>24.07.2009</DateAuction>
<Location>BURSCOUGH</Location>
<CanBeViewed>YES</CanBeViewed>
<CostExVAT>0</CostExVAT>
<PAV>0</PAV>
<Images>
<Image_1>742281.jpg</Image_1>
<Image_2>742285.jpg</Image_2>
<Image_3>742286.jpg</Image_3>
<Image_4>742282.jpg</Image_4>
<Image_5>742283.jpg</Image_5>
<Image_6>742284.jpg</Image_6>
<Image_7>742287.jpg</Image_7>
<Image_8></Image_8>
<Image_9></Image_9>
<Image_10></Image_10>
<Image_11></Image_11>
<Image_12></Image_12>
</Images></Vehicle>
<Vehicle>
<AuctionID>25019</AuctionID>
<VehicleID>156171</VehicleID>
<Ref>1480714</Ref>
<Manufacturer>TOYOTA</Manufacturer>
<Model>RAV 4</Model>
<RegNo>DG52xxx</RegNo>
<RegYear>2002</RegYear>
<Colour>Blue</Colour>
<Fuel>Petrol</Fuel>
<Damage>FRONT</Damage>
<Doors>3</Doors>
<Body>4X4</Body>
<CC>1794</CC>
<Speedo>66,876</Speedo>
<TransSpeed>5 Speed</TransSpeed>
<TransType>Manual</TransType>
<TrimLevel>CLOTH</TrimLevel>
<Engine></Engine>
<Cat>U</Cat>
<ReservePrice>954</ReservePrice>
<StartPrice>0</StartPrice>
<HasVAT>0</HasVAT>
<Keys>1</Keys>
<Starts>1</Starts>
<Drives>1</Drives>
<Stereo>0</Stereo>
<VINPlate>1</VINPlate>
<LogBook>0</LogBook>
<DateAuction>24.07.2009</DateAuction>
<Location>BURSCOUGH</Location>
<CanBeViewed>YES</CanBeViewed>
<CostExVAT>0</CostExVAT>
<PAV>0</PAV>
<Images>
<Image_1>742273.jpg</Image_1>
<Image_2>742277.jpg</Image_2>
<Image_3>742278.jpg</Image_3>
<Image_4>742274.jpg</Image_4>
<Image_5>742275.jpg</Image_5>
<Image_6>742276.jpg</Image_6>
<Image_7>742280.jpg</Image_7>
<Image_8></Image_8>
<Image_9></Image_9>
<Image_10></Image_10>
<Image_11></Image_11>
<Image_12></Image_12>
</Images></Vehicle>
<Vehicle>
<Summary>
<NumberOfVehicles>39</NumberOfVehicles>
<DateExport>20.07.2009 12:52:09</DateExport>
</Summary>
</root>
My Knowledge of PERL is very basic and have learned by altering old scripts that were in use before i started here.
Many Thanks,
Michael