Flash で比較し、一致する各ノードに異なるスコアを割り当てる必要があるかなり大きな XML ファイルがいくつかあります。XML ファイルを制御できないため、ノード属性などを使用してポイント値を格納することはできません。以下の単純化された例では、多次元配列を使用してノードの位置を格納し、次に以下のようなポイント値を格納することを考えていました。エラーは返されませんが、ポイント値は 5 だけであるため、明らかに希望どおりに動作していません。どんな助けも大歓迎です。
var sourceXML:XML =
<root>
<white>
<player>
<name>DOES NOT MATCH</name>
<sport>Basketball</sport>
</player>
<player>
<name>John Johnson</name>
<sport>Soccer</sport>
</player>
<player>
<name>James Anderson</name>
<sport>Tennis</sport>
</player>
</white>
<black>
<player>
<name>John Smith</name>
<sport>Soccer</sport>
</player>
<player>
<name>Frank Johnson</name>
<sport>Soccer</sport>
</player>
<player>
<name>Peter Jackson</name>
<sport>Baseball</sport>
</player>
</black>
</root>
var comparedXML:XML =
<root>
<white>
<player>
<name>Steve Smith</name>
<sport>Basketball</sport>
</player>
<player>
<name>John Johnson</name>
<sport>Soccer</sport>
</player>
<player>
<name>James Anderson</name>
<sport>Tennis</sport>
</player>
</white>
<black>
<player>
<name>John Smith</name>
<sport>Soccer</sport>
</player>
<player>
<name>Frank Johnson</name>
<sport>Soccer</sport>
</player>
<player>
<name>Peter Jackson</name>
<sport>Baseball</sport>
</player>
</black>
</root>
trace(sourceXML.white.player.name[0]); //DOES NOT MATCH
trace(comparedXML.white.player.name[0]); //Steve Smith
var scored:Array = new Array();
scored[0] = [".white.player.name[0]", "100"];
scored[1] = [".white.player.name[1]", "1"];
scored[2] = [".white.player.name[2]", "1"];
scored[3] = [".white.player.sport[0]", "1"];
scored[4] = [".white.player.sport[1]", "1"];
scored[5] = [".white.player.sport[2]", "1"];
var points:Number = 0;
for(var i:int = 0; i < scored.length; i++)
{
if(sourceXML[scored[i][0]] == comparedXML[scored[i][0]])
{
points += Number(scored[i][1]);
}
}
trace(points);