0

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);
4

1 に答える 1