Jump to content

Insert XML feed data into MySql database


GalaxyTramp

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. Please don't revive it unless you have something important to add.

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.

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