Jump to content


Photo

Parsing XML data file in php


  • Please log in to reply
No replies to this topic

#1 coolwinter

coolwinter
  • New Members
  • Pip
  • Newbie
  • 1 posts

Posted 26 September 2006 - 08:12 PM

Hi,
I have written a php routine which parses a xml file and puts the data in the database the script goes into a certain folder looks for .xml files and then parses them one by one and does the database entry.
I have written this code so far however I am not able to get the right sql queries .
Each xml file will have one order id and several images associated with that orderid and there maybe several such xml files. Now for each orderid I have to insert the order id and imagenames and other data into the database.
HERE IS MY CODE.
<?php
include("/home/caskie/www/demos/laserlight/includes/global_vars.php");
require_once("/home/caskie/www/demos/laserlight/includes/cls_db.php");
$db=new db(_DB_HOST_,_DB_NAME_,_DB_USER_NAME_,_DB_USER_PASSWORD_,true);
                $db->db_connect();
                $db->db_select_db();

$newDirectory = "/home/caskie/www/demos/laserlight/samples/php/photo/";

$xml_orderid_key = "*ORDER*ORDERID";
$xml_ordernumber_key = "*ORDER*ORDERNUMBER";
$xml_custname_key = "*ORDER*CUSTOMER*NAME";
$xml_qty_key = "*ORDER*ITEMS*ITEM*QUANTITY";
$xml_img_key = "*ORDER*ITEMS*ITEM*IMAGES*IMAGE*NAME";
$xml_retailsku_key = "*ORDER*ITEMS*ITEM*PRODUCT*RETAILSKU";
$xml_coaddress1_key = "*ORDER*SHIPTOADDRESS*LINE1";
$xml_coaddress2_key = "*ORDER*SHIPTOADDRESS*LINE2";
$xml_cocity_key = "*ORDER*SHIPTOADDRESS*CITY";
$xml_costate_key = "*ORDER*SHIPTOADDRESS*STATE";
$xml_cozipcode_key = "*ORDER*SHIPTOADDRESS*ZIPCODE";
 

$story_array = array();

$counter = 0;
class xml_story{
    var $orderid, $ordernumber, $custname, $qty, $imgname, $retailsku, $coaddress1, $coaddress2, $cocity, $costate, $cozipcode;
}

function startTag($parser, $data){
    global $current_tag;
    $current_tag .= "*$data";
    //echo "<BR>Start Tag = " . $current_tag."<BR>";
}

function endTag($parser, $data){
    global $current_tag;
    $tag_key = strrpos($current_tag, '*');
    $current_tag = substr($current_tag, 0, $tag_key);
    //echo "<BR>End Tag =" . $current_tag."<BR>";
}

function contents($parser, $data){
    global $current_tag, $xml_orderid_key, $xml_ordernumber_key, $xml_custname_key, $xml_qty_key, $xml_img_key, $xml_retailsku_key, $xml_coaddress1_key, $xml_coaddress2_key, $xml_cocity_key, $xml_costate_key, $xml_cozipcode_key, $counter, $story_array;

    switch($current_tag){
        case $xml_orderid_key:
            $story_array[$counter] = new xml_story();
            $story_array[$counter]->ORDERID = $data;
            break;
        case $xml_ordernumber_key:
            $story_array[$counter]->ORDERNUMBER = $data;
             break;
        case $xml_custname_key:
           $story_array[$counter]->NAME = $data;
           break;
        case $xml_qty_key:
            $story_array[$counter]->QUANTITY = $data;
            break;
        case $xml_cozipcode_key:
             $story_array[$counter]->ZIPCODE = $data;
              break;
        case $xml_retailsku_key:
            $story_array[$counter]->RETAILSKU = $data;
            break;
        case $xml_coaddress1_key:
            $story_array[$counter]->LINE1 = $data;
            break;
        case $xml_coaddress2_key:
            $story_array[$counter]->LINE2 = $data;
            break;
        case $xml_cocity_key:
            $story_array[$counter]->CITY = $data;
            break;
        case $xml_costate_key:
            $story_array[$counter]->STATE = $data;
            break;
        case $xml_img_key:
            $story_array[$counter]->NAME = $data;
            $counter++;
            break;
    }
}
foreach (glob('*.xml') as $filename)
{
    //unset($data);
    $xml_parser = xml_parser_create();

    xml_set_element_handler($xml_parser, "startTag", "endTag");

    xml_set_character_data_handler($xml_parser, "contents");

    $fp = fopen($filename, "r") or die("Could not open file");

    $data = fread($fp, filesize($filename)) or die("Could not read file");


    if(!(xml_parse($xml_parser, $data, feof($fp))))
        {
            die("Error on line " . xml_get_current_line_number($xml_parser));

            
         }

xml_parser_free($xml_parser);
    fclose($fp);
    //echo "<BR>File Opened = ".$filename."<BR>".$data."<BR>";
    $newfile = str_replace("xml", "ack", $filename);
    $cmd = "mv ".$filename." ".$newfile;
    //echo "Command to be executed". $cmd;
    system($cmd);
}
?>

    <html>
    <head>
    <title>Parsed Order Details </title>
    </head>
    <body bgcolor="#FFFFFF">
    <?php
        //echo "Start Before";
        //for($l=0;$l<count($Image_Name);$l++)
        //        echo "<BR>".$Image_Name[$l]."<BR>";
       //echo "End Before<hr><BR>";
       
        unset($Image_Name);
        //unset($Order_ID);
        unset($Order_Number);
        unset($Customer_Name);
        unset($Quantity);
        unset($RetailSku);
        unset($Company_Addr1);
        unset($Company_Addr2);
        unset($Company_City);
        unset($Company_Zipcode);
            //echo "Image = " . $Image_Name[0];
        for($x=0;$x<count($story_array);$x++)
            {
                if($story_array[$x]->ORDERID != '')
                $Order_ID[] = $story_array[$x]->ORDERID;
                $Order_Number[]=$story_array[$x]->ORDERNUMBER;
                $Customer_Name[] =$story_array[$x]->NAME;
                $Quantity[] = $story_array[$x]->QUANTITY;
                $Image_Name[] = $story_array[$x]->NAME;
                $RetailSku[] = $story_array[$x]->RETAILSKU;
                $Company_Addr1[] = $story_array[$x]->LINE1;
                $Company_Addr2[] = $story_array[$x]->LINE2;
                $Company_City[] = $story_array[$x]->CITY;
                $Company_State[] = $story_array[$x]->STATE;
                $Company_Zipcode[] = $story_array[$x]->ZIPCODE;
    
            }
            //echo "<br>Start after";
            //for($l=0;$l<count($Image_Name);$l++)
    //{
                
    //            echo "<BR>".$Image_Name[$l]."<BR>";
    //            
    //}
    //echo "End after<br>";
    for($j=0;$j< count($Image_Name); $j++)
    {
        if($RetailSku[$j] == 'laso2rdpers')
        $Color = "Red";
        elseif($RetailSku[$j] == 'laso2rdperss')
        {
            $Color = "Red Sample";
            $special_inst = "SAMPLE ORDER";
        }
        elseif($RetailSku[$j] == 'laso2gdpers')
            $Color = "Gold";
        elseif($RetailSku[$j] == 'laso2gdperss')
        {
            $Color = "Gold Sample";
            $special_inst = "SAMPLE ORDER";
        }
    $sql = "insert into tbl_cart (order_id, final_image, prod_type, Quantity, Color, Size, special_instructions, cust_id) values('".$Order_ID[0]."', '". $Image_Name[$j]."', 'Photo_Images', '".$Quantity[$j]."', '".$Color."', '3 1/4', '".$special_inst."', '')";
       echo "<BR>".$sql."<BR>";
    //unset($story_array);  
    $movefiles =  "mv ".$Image_Name[$j]." ".$newDirectory;
    $newfile = str_replace("xml", "ack", $filename);
    $cmd = "mv ".$filename." ".$newfile;
    //echo "Command to be executed". $cmd;
    //system($cmd);
    //unset($Image_Name);

    }//End for loop
unset ($data);
//unset($Image_Name);
?>


</body>
</html>
<?
//}//end foreach loop
//unset($Image_Name)
?>

However my arrays are not being initialized properly and so I get the values from my previous file when I parse the next file and so duplicate enteries are being made into the database.
Appreciate if anybody can help me in this.
The sample xml files are .
<order>
        <version>2.1</version>
        <asnrequired>yes</asnrequired>
        <orderid>WAL-2222-2222-222222</orderid>
        <ordernumber>12345678987</ordernumber>
        <envelopenumber>456789</envelopenumber>
        <ordertype>Photo Gifts</ordertype>
        <entrydate>3/3/2004</entrydate>
        <orderdate>3/3/2004</orderdate>
        <printsreceived>Y</printsreceived>
        <expedite>0</expedite>
        <orderprice>42.00</orderprice>
        <redo>
            <originalorderId></originalorderId>
            <responsibility></responsibility>
            <notes></notes>    
        </redo>
        <customer>
            <name>Smith</name>
            <phone>555-555-5555</phone>
        </customer>
        <shipping>
            <carrier>Airborne</carrier>
            <carrierid>12</carrierid>
            <method>2 Day</method>
            <methodid>34</methodid>
        </shipping>
        <retailer>
            <retailerid>WAL</retailerid>        
            <retailername>Walgreens</retailername>
        </retailer>
        <store>
            <storeid>8765</storeid>
            <storename>Wilsons Super Store</storename>
        </store>
        <timestamp>11/23/03 11:31:03</timestamp>
        <duedate>12/11/2003</duedate>
        <fromaddress>
            <line1>PhotoTLC, Inc</line1>
            <line2>100 Tamal Plaza Suite 250</line2>
            <line3></line3>
            <city>Corte Madera</city>
            <county></county>
            <province></province>
            <state>CA</state>
            <zipcode>94925</zipcode>
            <country>US</country>
            <phone>555-555-5555</phone>
        </fromaddress>
        <toaddress>
            <line1>Walgreens ? Photo Dept</line1>
            <line2>Store No. 167</line2>
            <line3>Luna St  Carro St</line3>
            <city>San German</city>
            <county></county>
            <province></province>
            <state>PR</state>
            <zipcode>06823</zipcode>
            <country>US</country>
            <phone>555-555-5555</phone>
        </toaddress>
        <shiptoaddress>
            <line1>12 Mall Drive</line1>
            <line2></line2>
            <line3></line3>
            <city>Millway</city>
            <county></county>
            <province></province>
            <state>MI</state>
            <zipcode>44444</zipcode>
            <country>US</country>
                    <phone>555-555-5555</phone>
        </shiptoaddress>
        <region>12</region>
        <mailroom>222</mailroom>    
        <itemcount>1</itemcount>
        <items>
            <item>
                <itemsequence>1</itemsequence>
                <product>
                    <description>Large dual print T-Shirt w/Text</description>
                    <retailsku>P675656</retailsku>
                    <fulfillmentsku>333444555</fulfillmentsku>
                    <wholesaleprice>17.99</wholesaleprice>
                    <retailprice>29.95</retailprice>
                </product>
                <discount>
                    <reason>$5 off coupon</reason>
                    <amount>5</amount>
                </discount>
                <quantity>1</quantity>
                <comment></comment>
                <imagecount>2</imagecount>
                <images>
                    <image>
                        <description>front image</description>
                        <name>WAL-2345-7665544323-04112003-01.jpg</name>
                        <url></url>
                    </image>
                    <image>
                        <description>back image</description>
                        <name>WAL-2345-7665544323-04112003-01.jpg</name>
                        <url></url>
                    </image>
                </images>
                <itemattributecount>2</itemattributecount>
                <itemattributes>
                    <itemattribute>
                        <name>FrontText</name>
                        <value>Hello</value>
                    </itemattribute>
                    <itemattribute>
                        <name>BackText</name>
                        <value>Goodbye</value>
                    </itemattribute>
                </itemattributes>
            </item>
        </items>
</order>

<order>
  <version>2.1</version>
  <asnrequired>no</asnrequired>
  <orderid>13238905</orderid>
  <ordernumber>13238905</ordernumber>
  <envelopenumber>071906</envelopenumber>
  <ordertype>Photo Gifts</ordertype>
  <entrydate>07/19/2006</entrydate>
  <orderdate>07/19/2006</orderdate>
  <printsreceived>N</printsreceived>
  <expedite>0</expedite>
  <orderprice>0.00</orderprice>
  <redo>
    <originalorderId></originalorderId>
    <responsibility></responsibility>
    <notes></notes>
  </redo>
  <customer>
    <name>walgreens samples</name>
    <phone>315-704-0290</phone>
  </customer>
  <shipping>
    <carrier></carrier>
    <carrierid></carrierid>
    <method></method>
    <methodid></methodid>
  </shipping>
  <retailer>
    <retailerid>USW</retailerid>
    <retailername>Walgreens</retailername>
  </retailer>
  <store>
    <storeid>10157</storeid>
    <storename>Walgreens</storename>
  </store>
  <timestamp>07/25/2006 17:02:03</timestamp>
  <duedate>08/04/2006</duedate>
  <fromaddress>
    <line1>PhotoTLC, Inc.</line1>
    <line2>3925 Cypress Drive </line2>
    <line3></line3>
    <city>Petaluma</city>
    <county></county>
    <province></province>
    <state>CA</state>
    <zipcode>94954</zipcode>
    <country>US</country>
    <phone>1-888-898-1901</phone>
  </fromaddress>
  <toaddress>
    <line1>WALGREENS - PHOTO DEPT</line1>
    <line2>Store No. 10157</line2>
    <line3>150 Grant Ave </line3>
    <city>Auburn</city>
    <county></county>
    <province></province>
    <state>NY</state>
    <zipcode>13021</zipcode>
    <country>US</country>
    <phone>315-704-0290</phone>
  </toaddress>
  <shiptoaddress>
    <line1>WALGREENS - PHOTO DEPT</line1>
    <line2>Store No. 10157</line2>
    <line3>150 Grant Ave </line3>
    <city>Auburn</city>
    <county></county>
    <province></province>
    <state>NY</state>
    <zipcode>13021</zipcode>
    <country>US</country>
    <phone>315-704-0290</phone>
  </shiptoaddress>
  <region></region>
  <mailroom></mailroom>
  <itemcount>5</itemcount>
  <items>
    <item>
      <itemsequence>11</itemsequence>
      <product>
        <description>*Clock 12&quot; Sports MLB sample</description>
        <retailsku>NWS73000536</retailsku>
        <fulfillmentsku>4315</fulfillmentsku>
        <wholesaleprice>14.0000</wholesaleprice>
        <retailprice>0.0000</retailprice>
      </product>
      <discount>
        <reason></reason>
        <amount></amount>
      </discount>
      <quantity>1</quantity>
      <comment></comment>
      <imagecount>1</imagecount>
      <images>
        <image>
         <description></description>
         <name>USW071906-25.13238905.jpg</name>
         <url>http://images.phototlc.net/gifts/05/USW071906-25.13238905.jpg</url>
        </image>
      </images>
      <itemattributecount>1</itemattributecount>
      <itemattributes>
        <itemattribute>
          <name>Baseball Team</name>
          <value>FLORIDA MARLINS|14-31</value>
        </itemattribute>
      </itemattributes>
    </item>
    <item>
      <itemsequence>12</itemsequence>
      <product>
        <description>*Mousepad Sports NFL Sample</description>
        <retailsku>NWS80000544</retailsku>
        <fulfillmentsku>5620</fulfillmentsku>
        <wholesaleprice>5.8000</wholesaleprice>
        <retailprice>0.0000</retailprice>
      </product>
      <discount>
        <reason></reason>
        <amount></amount>
      </discount>
      <quantity>1</quantity>
      <comment></comment>
      <imagecount>1</imagecount>
      <images>
        <image>
         <description></description>
         <name>USW071906-26.13238905.jpg</name>
         <url>http://images.phototlc.net/gifts/05/USW071906-26.13238905.jpg</url>
        </image>
      </images>
      <itemattributecount>1</itemattributecount>
      <itemattributes>
        <itemattribute>
          <name>Football Team</name>
          <value>PHIL EAGLES|10-51</value>
        </itemattribute>
      </itemattributes>
    </item>
    <item>
      <itemsequence>13</itemsequence>
      <product>
        <description>*Mug 11oz. White Sports MLB Sample</description>
        <retailsku>NWS81000545</retailsku>
        <fulfillmentsku>2571</fulfillmentsku>
        <wholesaleprice>6.8000</wholesaleprice>
        <retailprice>0.0000</retailprice>
      </product>
      <discount>
        <reason></reason>
        <amount></amount>
      </discount>
      <quantity>1</quantity>
      <comment></comment>
      <imagecount>1</imagecount>
      <images>
        <image>
         <description></description>
         <name>USW071906-27.13238905.jpg</name>
         <url>http://images.phototlc.net/gifts/05/USW071906-27.13238905.jpg</url>
        </image>
      </images>
      <itemattributecount>1</itemattributecount>
      <itemattributes>
        <itemattribute>
          <name>Baseball Team</name>
          <value>MINNESOTA TWINS|14-41</value>
        </itemattribute>
      </itemattributes>
    </item>
    <item>
      <itemsequence>14</itemsequence>
      <product>
        <description>*Stein 16 oz Sports NFL, sample</description>
        <retailsku>NWS88000556</retailsku>
        <fulfillmentsku>5546</fulfillmentsku>
        <wholesaleprice>8.8000</wholesaleprice>
        <retailprice>0.0000</retailprice>
      </product>
      <discount>
        <reason></reason>
        <amount></amount>
      </discount>
      <quantity>1</quantity>
      <comment></comment>
      <imagecount>1</imagecount>
      <images>
        <image>
         <description></description>
         <name>USW071906-28.13238905.jpg</name>
         <url>http://images.phototlc.net/gifts/05/USW071906-28.13238905.jpg</url>
        </image>
      </images>
      <itemattributecount>1</itemattributecount>
      <itemattributes>
        <itemattribute>
          <name>Football Team</name>
          <value>SD CHARGERS|10-57</value>
        </itemattribute>
      </itemattributes>
    </item>
    <item>
      <itemsequence>15</itemsequence>
      <product>
        <description>*Tumbler 16 oz Slimline Sports MLB Sample</description>
        <retailsku>NWS89000560</retailsku>
        <fulfillmentsku>5544</fulfillmentsku>
        <wholesaleprice>8.0000</wholesaleprice>
        <retailprice>0.0000</retailprice>
      </product>
      <discount>
        <reason></reason>
        <amount></amount>
      </discount>
      <quantity>1</quantity>
      <comment></comment>
      <imagecount>1</imagecount>
      <images>
        <image>
         <description></description>
         <name>USW071906-29.13238905.jpg</name>
         <url>http://images.phototlc.net/gifts/05/USW071906-29.13238905.jpg</url>
        </image>
      </images>
      <itemattributecount>1</itemattributecount>
      <itemattributes>
        <itemattribute>
          <name>Baseball Team</name>
          <value>ATLANTA BRAVES|14-11</value>
        </itemattribute>
      </itemattributes>
    </item>
  </items>
</order>
Appreciate any help in this regards,
Thanks,





0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users