我想要一些指示让我继续这个,我不知道从哪里开始,所以我会感激一些帮助。我有这种格式的(或+)xml文件:
<?xml version="1.0"?>
<Standings>
<Team Rank="1" Name="fsdfsdf, fsfsdaf" DCI="UNIQUENUMBERHERE" MatchPoints="6" MatchResultsPWDB="2/2/0/0" OpponentMatchWinPercent="50" GamesWinPercent="66,6667" OpponentsGameWinPercent="50" />
<Team Rank="2" Name="dasdasd, asdasd" DCI="UNIQUENUMBERHERE" MatchPoints="6" MatchResultsPWDB="2/2/0/0" OpponentMatchWinPercent="41,5" GamesWinPercent="80" OpponentsGameWinPercent="36,6667" />
</Standings>
我想做的是:
(1)提取作为键值的DCI,一个唯一的整数,并为每个DCI添加MatchPoints并获取名称。
(2)将添加更多的报告(xml),因此多次出现应该出现相同的DCI(并添加点并仅返回一个)。
(3)返回xml格式化(以后处理并添加其他报告 - 递归点2)
(4)在htmlt表中导出的选项,但在我设法提取值之后,它只是一个格式化输出更改。
首先,我在正则表达式中考虑将所有值提取到数组,然后检查keyvalue(DCI)并添加总计并获取最终数组并从那里导出。但在谷歌搜索之后,我已经看到javascript和php具有处理xml的功能,但没有看到类似于我正在寻找的东西。
对最佳行动或一些快速示例的一些帮助会很棒。
答案 0 :(得分:0)
所以我用正则表达式解决了这个问题,如果有人感兴趣或希望给它性能/安全性更新,这里是代码。
//get the strings from form with POST
$xmldb = $_POST["xmldb"];
$xmlup = $_POST["xmlup"];
// regular expression
$re = "/<team rank=\"\\d+\" Name=\"([a-z, ]+)\" dci=\"([0-9]+)\" matchpoints=\"(\\d+)\" MatchResultsPWDB=\"([0-9]+)\\//mi";
preg_match_all($re, $xmldb, $matches);
preg_match_all($re, $xmlup, $matchesup);
$bd = Array();
for ($i = 0; $i <= sizeof($matches[1]) -1;$i++ ) {
//print($i);
$bd[$matches[2][$i]] = Array
(
$matches[1][$i], //NOME
$matches[3][$i], // PONTOS
$matches[4][$i] // MATCHES
)
;
}
$update = Array();
for ($i = 0; $i <= sizeof($matchesup[1]) -1;$i++ ) {
print($i);
$update[$matchesup[2][$i]] = Array
(
$matchesup[1][$i], //NOME
$matchesup[3][$i], // PONTOS
$matchesup[4][$i] // MATCHES
)
;
}
//update bd with new values
foreach ($update as $key => $val) {
if (array_key_exists($key,$bd)) { $nome = $update[$key][0]; $pontos = $update[$key][1] + $bd[$key][1]; $jogos = $update[$key][2] + $bd[$key][2]; $bd[$key] = Array($nome,$pontos,$jogos); }
else $bd[$key] = $val;
}
仍然缺少排序选项(打印很容易),需要按两个参数排序,但我相信我会搞清楚。