php 读取mysql 返回xml_用php解析xml并保存到mysql

我被要求解析一个存储为XML文件的简单文件,然后将数据保存到MySQL。

然而,我完全不知道该怎么做,并且在网上查看之后,给出的所有示例对于我的问题来说似乎太复杂,或者不是正确的解决方案。XML文件如下所示

游戏分数.xml

Reference Scores

-

Game Information Scores

-

-

............etc

然后我必须把它保存到现有的mysql中,看起来

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');

关于这个问题,我有下面的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 = "{}is";

preg_match_all($pattern,$buffer,$xml_values);

array_shift($xml_values);

for($i=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();

}

}

?>

然后,使用创建的脚本mysql表/查询如下:

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');

但是数据库不是自动填充的,这看起来函数downloadValueScores()工作不正常。

我试过把它修好,我想这就是我要走的方向,但我不知道。另外,很抱歉,我对PHP还不熟悉。

任何帮助或指点都是很好的,非常感谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值