Jump to content

Insert XML feed data into MySql database


GalaxyTramp
 Share

Recommended Posts

Hi

 

I have been trying to grab some data from an XML feed parse it and then insert it into a database. I will only need to do this on one occasion so no update or deletes.

 

Sample of xml structure:

<property>
<id>34935</id>
<date>2009-11-03 06:52:45</date>
<ref>SVS0108</ref>
<price>450000</price>
<currency>EUR</currency>
<price_freq>sale</price_freq>
</property>

 

Using xml2array class to parse the feed:

 

<?php
/**
* xml2array Class
* Uses PHP 5 DOM Functions
*
* This class converts XML data to array representation. 
* 
*/
class Xml2Array
{
    /**
     * XML Dom instance
     *
     * @var XML DOM Instance
     */
    private $xml_dom;
      
    /**
     * Array representing xml
     *
     * @var array
     */
    private $xml_array;
     
    /**
      * XML data
      *
      * @var String
      */
      private $xml;  
      
      
      public function __construct($xml = '')
      {
          $this->xml = $xml;
      }
      
      public function setXml($xml)
      {
          if(!empty($xml))
          {
              $this->xml = $xml;    
          }
      }
      
    /**
     * Change xml data-to-array
     * 
     * @return Array
     */
    public function get_array()
    {
        if($this->get_dom() === false)
        {
            return false;
        }
        
        $this->xml_array = array();
        $root_element = $this->xml_dom->firstChild;
        $this->xml_array[$root_element->tagName] = $this->node_2_array($root_element);
        
        return $this->xml_array;
    }
    
    private function node_2_array($dom_element)
    {
        if($dom_element->nodeType != XML_ELEMENT_NODE)
        {
            return false;
        }
        
        $children = $dom_element->childNodes;
        
        foreach($children as $child)
        {
            if($child->nodeType != XML_ELEMENT_NODE)
            {
                continue;
            }
            
            $prefix = ($child->prefix) ? $child->prefix.':' : '';
            
            if(!is_array($result[$prefix.$child->nodeName]))
            {
                $subnode = false;
    
                foreach($children as $test_node)
                {
                    if($child->nodeName == $test_node->nodeName && !$child->isSameNode($test_node))
                    {
                        $subnode = true;
                        break;
                    }
                }
            }
            else
            {
                $subnode = true;
            }
            
            if ($subnode)
            {
                $result[$prefix.$child->nodeName][] = $this->node_2_array($child);    
            }
            else
            {
                $result[$prefix.$child->nodeName] = $this->node_2_array($child);
            }
        }
        
        if (!is_array($result))
        {
            $result['#text'] = html_entity_decode(htmlentities($dom_element->nodeValue, ENT_COMPAT, 'UTF-8'), ENT_COMPAT,'ISO-8859-15');
        }
        
        if ($dom_element->hasAttributes())
        {
            foreach ($dom_element->attributes as $attrib)
            {
                $prefix = ($attrib->prefix) ? $attrib->prefix.':' : '';
                $result["@".$prefix.$attrib->nodeName] = $attrib->nodeValue;
            }
        }
        
        return $result;    
    }
    
    /**
     * Generated XML Dom
     *
     */
    private function get_dom()
    {
        if(empty($this->xml))
        {
            echo 'No XML found. Please set XML data using setXML($xml)';
            return false;
        }
        
        $this->xml_dom = @DOMDocument::loadXML($this->xml);
        
        if($this->xml_dom)
        {
            return $this->xml_dom;
        }
        
        echo 'Invalid XML data'; exit;
    }
}
?>

 

My results page:

<?php
require_once('classes/xml2array.php');
require_once('conn.php');

    function curlURL($url) {  
     $ch= curl_init();  
       curl_setopt($ch, CURLOPT_URL, $url);  
         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
           curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2');  
       $output = curl_exec($ch);  
      return $output;  
   }  
    
  $curlResults = curlURL("http://localhost/alphashare_dump/property.xml");  
     
  $xml = $curlResults;
  


$converter = new Xml2Array();
$converter->setXml($xml);
$xml_array = $converter->get_array();





$array = ($xml_array['root']['property']);

echo "<pre>";
print_r($array);
echo "</pre>";

////////////// INSERT DATA INTO DB ////////////////////////////////////////////////////


?>

 

My array structure looks like this:

 

Array
(
    [0] => Array
        (
            [id] => Array
                (
                    [#text] => 34935
                )

            [date] => Array
                (
                    [#text] => 2009-11-03 06:52:45
                )

            [ref] => Array
                (
                    [#text] => SVS0108
                )

            [price] => Array
                (
                    [#text] => 450000
                )

            [currency] => Array
                (
                    [#text] => EUR
                )

            [price_freq] => Array
                (
                    [#text] => sale
                )

            [part_ownership] => Array
                (
                    [#text] => 0
                )

 

Can somebody help with actually getting this into some format that will enable me to insert this into my database please :)

 

GT

Link to comment
Share on other sites

This thread is more than a year old.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • 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.