来自xml的元素标识添加和计数(javascript / php)

时间:2015-06-13 15:29:41

标签: javascript php xml

我想要一些指示让我继续这个,我不知道从哪里开始,所以我会感激一些帮助。我有这种格式的(或+)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的功能,但没有看到类似于我正在寻找的东西。

对最佳行动或一些快速示例的一些帮助会很棒。

1 个答案:

答案 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;
}

仍然缺少排序选项(打印很容易),需要按两个参数排序,但我相信我会搞清楚。