gpt4 book ai didi

php - 如何高效解析xml数据?

转载 作者:搜寻专家 更新时间:2023-10-30 20:20:52 25 4
gpt4 key购买 nike

我有两个问题:

1-我需要解析 XML 文件并将数据插入 mysql 数据库。假设该文件大约为 250 kB(但它可能更大)并且它有很多子节点,所以我至少需要 3 个表。我用 SimpleXml 解析了 xml,并成功地将所有数据插入到 db 中。但是对于这个确切的文件,它花了大约 160 秒,这对我来说似乎很多。有没有一种方法可以在更短的时间内做得更好?

另一个问题是我需要从 URL 获取 XML 文件并保存到服务器,但我不确定该怎么做......

感谢您的回答。

解析xml的代码

function parse_xml($file=""){
global $database;
if(file_exists($file) && !empty($file)){
$sport = new SimpleXMLElement($file, null, true);
$count = count($sport->OddsObject)-1;
$listAttr = array();
$start_time = time();
for($i=0; $i <= $count; $i++){
$countMatch = count($sport->OddsObject[$i]->Matches->Match)-1;
//echo $countMatch;
for($k=0; $k <= $countMatch; $k++){
$OOdata = $sport->OddsObject[$i]->children();
$columns = array();
$data = array();
foreach($OOdata as $key => $value){
if($key != "Matches"){
//$listAttr[$i][$key] = $attr;
$columns[] = $key;
if ($value != "") {
$data[] = "'" . $database->escape_value($value) . "'";
} else {
$data[] = "NULL";
}
}
}

//get matches: MatchId, Date, HomeTeam, AwayTeam
$Mdata = $sport->OddsObject[$i]->Matches->Match[$k]->children();
foreach ( $Mdata as $key => $value) {
if($key != "OddsData"){
$columns[] = $key;
if ($value != "") {
$data[] = "'" . $database->escape_value($value) . "'";
} else {
$data[] = "NULL";
}
}
}
$cols = strtolower(implode(",",$columns));
$values = implode(",",$data);
$sql = "INSERT INTO sports($cols) values(".$values.")";
if($database->query($sql)) {
$last_id = $database->insert_id();

$countData = count($sport->OddsObject[$i]->Matches->Match[$k]->OddsData)-1;
for($t=0; $t <= $countData; $t++){
//get OddsData: Home-,Draw-, -Away ...
$ODdata = $sport->OddsObject[$i]->Matches->Match[$k]->OddsData[$t]->children();
foreach($ODdata as $key=>$attr){
$MID = $last_id;
$new_bet = Bet::make($attr->getName(),$attr, $MID);
$new_bet->save();

}
}
}
}
$end_time = time() - $start_time;
}
return $end_time;
}
else{
die("The file doesn't exist.");
}
}

最佳答案

从 url 获取文件并写入文件的一种非常简单的方法是 file_get_contents() 和 file_put_contents()。

SimpleXML 对于只有 250kb 的文件应该非常高效和快速。您的缓慢可能与数据库插入有关。尝试将您的插入分组到数据库中。我发现一次运行 50 个插入通常效果最好(但这取决于行大小)。这可能会大大加快整个过程。

关于php - 如何高效解析xml数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6620030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com