我被要求解析一个存储为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还不熟悉。
任何帮助或指点都是很好的,非常感谢