Jump to content

Load XML to mySQL


eeekin_07

Recommended Posts

i actualy just did this.

 

basicly i use php 5. it has the simpleXML extension.

 

i iterate throgh the xml file and store the values i want into one array, like so

 

$movielist = simplexml_load_file('http://www.path to XML file');

//retrive the array of movie titles from the xml file
foreach ($movielist->movie as $movie) {
$array[] = $movie->title;
}

 

now all my values i want are in the $array variable.

now ill chuck them into a database (assuming one is already created and has a table to put the data into)

 

foreach ($array as $xml_title) {
$sql = "INSERT INTO movie_list (title,date) VALUES(\"$xml_title\",\"$timestamp\");";
sqlite_query($dbase_connection,$sql);
}

 

for mysql specific functions - i find this book healpfull

 

http://www.hudzilla.org/php/

 

i hope this helps

 

edit, if the $timestamp var throws you off its just a simple $timestamp = time();

Link to comment
https://forums.phpfreaks.com/topic/47495-load-xml-to-mysql/#findComment-231810
Share on other sites

Thanx maxim,

 

i've tried using your code an it is only success if the xml file like this:

 

<TransactionMessage>

  <TransactionHeader>

        <ServiceName>KSM - Application for Incentive Under the Programme to Encourage Malaysian Citizens with Expertise Residing Overseas to Return to Malaysia</ServiceName>

        <Version>1.0</Version>

        <AgencyIdentifier>fksm</AgencyIdentifier>

        <TransactionDate>11/04/2007 14:20:14</TransactionDate>

        <PSPTransactionID>39265</PSPTransactionID>

        <PSPReferenceNumber>070411-00039265</PSPReferenceNumber>

  </TransactionHeader>

</TransactionMessage>

 

the problem is my xml stucture have 2 diff header: eg:

 

<TransactionMessage>

- <TransactionHeader>

      <ServiceName>KSM - Application for Incentive Under the Programme to Encourage Malaysian Citizens with Expertise Residing Overseas to Return to Malaysia</ServiceName>

      <Version>1.0</Version>

      <AgencyIdentifier>fksm</AgencyIdentifier>

      <TransactionDate>11/04/2007 14:20:14</TransactionDate>

      <PSPTransactionID>39265</PSPTransactionID>

      <PSPReferenceNumber>070411-00039265</PSPReferenceNumber>

  </TransactionHeader>

 

- <TransactionData>

-      <KSM_IncentiveProgrammeEN>

            <?jetform ^Dat ^page Page1?>

            <FullName>LAY YUN</FullName>

            <newic1Applicant>770911</newic1Applicant>

            <newic2Applicant>10</newic2Applicant>

        </KSM_IncentiveProgrammeEN>

  </TransactionData>

</TransactionMessage>

 

 

can U and anyone help me...

 

 

Link to comment
https://forums.phpfreaks.com/topic/47495-load-xml-to-mysql/#findComment-231825
Share on other sites

<?php 
// Author: Koolb, Buddhima W.Wickramsinghe ([email protected]) 

$arfiles= array("basic2.xml","dataset.xml"); 

foreach($arfiles as $arFile) 
{ 
    echo "<BR>-------------------------------------------------<BR>"; 
    echo "<BR>Parsing ".$arFile."<BR>"; 
    $insXmlParser= new clsXmlParser($arFile); 
     if($aArray=$insXmlParser->Parse()) {
    echo "<pre>";
print_r($aArray);
//echo LIST_CONTENTS($aArray); 
}
    echo "<BR>-------------------------------------------------<BR>"; 
##### // YOU WILL GET DATA HERE IN ARRAY FORMAT NOW YOU CAN SAVE DATA INTO MYSQL #######
} 
// Simple XML Parser  

class clsXmlParser { 

// general vars 
var $sTitle = ""; 
var $sLink = ""; 
var $sDescription = ""; 
var $arItems = array(); 
var $arsub = array(); 
var $itemCount = 0; 
var $prvTag="";   
var $uFiles = ''; 
var $xml_parser; 
var $curTag=""; 

function clsXmlParser($uFiles) 
{ 
     
    $this->uFiles = $uFiles; 
     
} 

function startElement($parser, $name, $attrs) { 
  
  $this->curTag .= "^$name";   
  //echo "start:  ".$this->curTag." <BR>"; 
  
} 

function endElement($parser, $name) 
{ 
   
  $caret_pos = strrpos($this->curTag,'^'); 
  $this->curTag = substr($this->curTag,0,$caret_pos); 
  //echo "end:  ".$this->curTag." <BR>"; 
} 

function characterData($parser, $data) {  
  
  if(trim($data) != "") 
  { 
        if(trim($this->prvTag) == "") 
              $this->prvTag=$this->curTag; 
      elseif(trim($this->prvTag) == trim($this->curTag)) 
      { 
          $this->arItems[] = $this->arsub; 
          $this->arsub = array(); 
         
        } 
   
        //find current element 
            $c_pos = strrpos($this->curTag,'^'); 
        $c_len = strlen($this->curTag); 
        $c_val = substr($this->curTag,($c_pos+1),$c_len); 

        //set data to sub array with the element name as the key 
        $this->arsub[$c_val] = $data; 
         
       
  } 

} 



function Parse() 
{ 
    $this->xml_parser = xml_parser_create(); 
         
     
    xml_set_object($this->xml_parser, &$this); 
     
    xml_set_element_handler($this->xml_parser, "startElement", "endElement"); 
    xml_set_character_data_handler($this->xml_parser, "characterData"); 
     
    if (!($fp = fopen($this->uFiles,"r")))  
    { 
      die ("could not open XML for input"); 
    } 
     
    while ($data = fread($fp, 4096))  
    { 
      if (!xml_parse($this->xml_parser, $data, feof($fp))) 
      { 
        die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($this->xml_parser)), xml_get_current_line_number($this->xml_parser))); 
      } 
    } 
    xml_parser_free($this->xml_parser); 
         
    //to handle the last array element 
    if(count($this->arsub)>0) 
    { 
         $this->arItems[] = $this->arsub; 
         $this->arsub = array(); 
    } 
         
    return $this->arItems; 

} 

} 

///----------END OF CLASS 


function LIST_CONTENTS($arrayname,$tab="&nbsp&nbsp&nbsp&nbsp",$indent=0)  
    {    
    // recursively displays contents of the array and sub-arrays:  
        // This function (c) Peter Kionga-Kamau  
        // Free for unrestricted use, except sale - do not resell.  
            // use: echo LIST_CONTENTS(array $arrayname, string $tab, int $indent);  
        // $tab = string to use as a tab, $indent = number of tabs to indent result  
        $retval=$currenttab=""; 
        while(list($key, $value) = each($arrayname))  
        {  
               for($i=0; $i<$indent; $i++) $currenttab .= $tab;  
            if (is_array($value))  
            {  
                $retval .= "$currenttab$key : Array: <BR>$currenttab{<BR>";  
                  $retval .= LIST_CONTENTS($value,$tab,$indent+1)."$currenttab}<BR>";  
            }  
               else $retval .= "$currenttab$key => $value<BR>";  
               $currenttab = NULL;  
        }  
        return $retval;  
    }  


?>

Link to comment
https://forums.phpfreaks.com/topic/47495-load-xml-to-mysql/#findComment-231848
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.