Php ile XML ayrıştırma ve mysql kaydedin

0 Cevap php

Ben bir XML dosyası olarak saklanır basit bir dosyayı ayrıştırmak için istendi, veriler daha sonra bir mysql kaydetmek olmaktır.

Ancak ben ne yapmak kesinlikle hiçbir ipucu var ve çevrimiçi verilen tüm örnekler baktıktan sonra benim sorun ya doğru çözüm için ya çok karmaşık görünüyor. XML dosyası bu gibi görünüyor

games_scores.xml

<gesmes:Letter>
<gesmes:subject>Reference Scores</gesmes:subject>
-
<gesmes:Sender>
<gesmes:name>Game Information Scores</gesmes:name>
</gesmes:Sender>
-
<Cube>
-
<Cube time="2010-10-13">
<Cube scores="GameA1" value="1.5803"/>
<Cube scores="GameA2" value="21.35"/>
............etc
<Cube scores="GameA15" value="135"/>
</Cube>
</Cube>
</gesmes:Letter>

sonra ben mevcut MySQL için kaydedilmiş gerektiğini, bu görünüyor bulunuyor

CREATE TABLE IF NOT EXISTS `scrore_table` (
  `scrore_id` int(11) NOT NULL auto_increment,
  `scrore_title` varchar(32) collate utf8_bin NOT NULL default '',
  `scores` varchar(15) collate utf8_bin NOT NULL default '',
  `decimal_place` char(1) collate utf8_bin NOT NULL,
  `value` float(15,8) NOT NULL,
  `date_updated` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`currency_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1; ;

INSERT INTO `scrore_table` (`scrore_id`, `scrore_title`, `scores`, `decimal_place`, `value`, `date_updated`) VALUES
(1, 'Game Class A0', 'GameA0', '2', 1.00000000, '2010-04-06 22:00:54'),
(2, 'Game Class A1', 'GameA1', '2', 1.58030000,  '2010-04-06 22:00:54'),
(3, 'Game Class A2', 'GameA2', '2', 21.3503000,  '2010-04-06 22:00:54'),
..............................etc
(15, 'Game Class A15', 'GameA15', '2', 135,  '2010-04-06 22:00:54');

Bu sorunun tarifi i izlenerek php script var:

<?php
class Scores_Converter {
   var $xml_file = "http://192.168.1.112/gamescores/games_scores.xml";
   var $mysql_host, $mysql_user, $mysql_pass, $mysql_db, $mysql_table;
   var $scores_values = array();

   //Load convertion scores
   function Scores_Converter($host,$user,$pass,$db,$tb) {
      $this->mysql_host = $host;
      $this->mysql_user = $user;
      $this->mysql_pass = $pass;
      $this->mysql_db = $db;
      $this->mysql_table = $tb;

      $this->checkLastUpdated();

      $conn = mysql_connect($this->mysql_host,$this->mysql_user,$this->mysql_pass); 
      $rs = mysql_select_db($this->mysql_db,$conn);
      $sql = "SELECT * FROM ".$this->mysql_table;
      $rs =  mysql_query($sql,$conn);   
      while($row = mysql_fetch_array($rs)) {
         $this->scores_values[$row['scores']] = $row['value'];         
      }
   }

   /* Perform the actual conversion, defaults to 1.00 GameA1 to GameA3 */
   function convert($amount=1,$from="GameA1",$to="GameA3",$decimals=2) {     return(number_format(($amount/$this->scores_values[$from])*$this->scores_values[$to],$decimals));
   }

   /* Check to see how long since the data was last updated */
   function checkLastUpdated() {
      $conn = mysql_connect($this->mysql_host,$this->mysql_user,$this->mysql_pass);

      $rs = mysql_select_db($this->mysql_db,$conn);
      $sql = "SHOW TABLE STATUS FROM ".$this->mysql_db." LIKE '".$this->mysql_table."'";
      $rs =  mysql_query($sql,$conn);

      if(mysql_num_rows($rs) == 0 ) {
         $this->createTable();
      } else {
         $row = mysql_fetch_array($rs);
         if(time() > (strtotime($row["Update_time"])+(12*60*60)) ) {
            $this->downloadValueScores();         
         }
      }
   }

   /* Download xml file, extract exchange values and save the values in database */
   function downloadValueScores() {
      $scores_domain = substr($this->xml_file,0,strpos($this->xml_file,"/"));
      $scores_file = substr($this->xml_file,strpos($this->xml_file,"/"));
      $fp = @fsockopen($scores_domain, 80, $errno, $errstr, 10);
      if($fp) {
         $out = "GET ".$scores_file." HTTP/1.1\r\n";
         $out .= "Host: ".$scores_domain."\r\n";
         $out .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5\r\n";
         $out .= "Connection: Close\r\n\r\n";
         fwrite($fp, $out);
         while (!feof($fp)) {
            $buffer .= fgets($fp, 128);
         }
         fclose($fp);

         $pattern = "{<Cube\s*scores='(\w*)'\s*value='([\d\.]*)'/>}is";
         preg_match_all($pattern,$buffer,$xml_values);
         array_shift($xml_values);

         for($i=0;$i<count($xml_values[0]);$i++) {
            $exchange_value[$xml_values[0][$i]] = $xml_values[1][$i];
         }

         $conn = mysql_connect($this->mysql_host,$this->mysql_user,$this->mysql_pass);
         $rs = mysql_select_db($this->mysql_db,$conn);

         foreach($exchange_value as $scores=>$value) {
            if((is_numeric($value)) && ($value != 0)) {
               $sql = "SELECT * FROM ".$this->mysql_table." WHERE scores='".$scores."'";
               $rs =  mysql_query($sql,$conn) or die(mysql_error());
               if(mysql_num_rows($rs) > 0) {
                  $sql = "UPDATE ".$this->mysql_table." SET value=".$value." WHERE scores='".$scores."'";
               } else {
                  $sql = "INSERT INTO ".$this->mysql_table." VALUES('".$scores."',".$value.")";
               }
               $rs =  mysql_query($sql,$conn) or die(mysql_error());
            }
         }   
      }
   }

   /* Create the scores table */
   function createTable() {
      $conn = mysql_connect($this->mysql_host,$this->mysql_user,$this->mysql_pass); 
      $rs = mysql_select_db($this->mysql_db,$conn);
      $sql = "CREATE TABLE ".$this->mysql_table." ( `scrore_id` int(11) NOT NULL, `scrore_title` varchar(32) collate utf8_bin NOT NULL default '', `scrores` char(12) NOT NULL default '', `decimal_place` char(1) collate utf8_bin NOT NULL default '2', `value` float(15,8) NOT NULL,`date_updated` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY(currency) ) ENGINE=MyISAM";   
      $rs =  mysql_query($sql,$conn) or die(mysql_error());
      $sql = "INSERT INTO ".$this->mysql_table." VALUES(1,'','GameA0','2',1,now())";
      $rs =  mysql_query($sql,$conn) or die(mysql_error());
      $this->downloadValueScores();   
   }
}
?> 

o komut mysql tablo / sorgu oluşturulan görünüm gibi:

INSERT INTO `scrore_table` (`scrore_id`, `scrore_title`, `scrores`, `decimal_place`, `value`, `date_updated`) VALUES
(1, 'Game Class A0', 'GameA0', '2', 1.00000000, '2010-10-24 00:27:01');

ancak veritabanı otomatik değil doldur, bu fonksiyon downloadValueScores görünüyor () düzgün çalışmayabilir

Ben bunu tespit denedim ve ben gitmek zorunda ama ben sadece hiçbir fikrim yok yönü olduğunu düşünüyorum. da ben üzgünüm, ben php için yeni duyuyorum.

Herhangi bir yardım veya işaretçiler büyük ve çok teşekkürler olurdu

0 Cevap