【问题标题】:Comparing XML with ActionScript 3比较 XML 与 ActionScript 3
【发布时间】:2013-06-11 11:15:37
【问题描述】:

我有一些相当大的 XML 文件需要在 Flash 中进行比较,然后为每个匹配的节点分配不同的分数。我无法控制 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);

【问题讨论】:

    标签: xml actionscript-3 flash loops comparison


    【解决方案1】:

    你不能让它遍历 XML 中的多个属性,就像你在这里尝试的方式 sourceXML[scored[i][0]]

    为什么不直接将他们的得分存储在 XML 中,然后在循环中遍历两个 XML 列表?由于代码似乎很难维护,因此您添加的每个条目都会添加大量代码。

    【讨论】:

    • 你是在建议if(sourceXML.white.player.name[0] == comparedXML.white.player.name[0]){points += 100}
    • 这就是我得到的结果,除了点 += 值也将存储在 XML 中。我只是想了解为什么需要将数据与 XML 中的一部分和数组中的一部分分开,这似乎使事情变得任意复杂,您可以将其全部定义为一个或另一个,或者如果您需要有一些在 XML 和一些在数组中,首先将这些列表组合为它自己的问题,然后迭代/比较步骤很容易。
    • 感谢您的提示。不幸的是,我没有生成 XML,因此我无法向其中添加任何内容或以任何方式对其进行更改。此外,名称空间和数千个深度嵌套的节点也变得相当复杂。并非所有节点都被评分,但很多节点都被评分,所以我想我试图避免编写数百或数千个 if...then 比较来直接比较/评分值,但这可能是唯一的方法。
    • 我认为,如果您更笼统地写出您的问题所在,而不是以这种方式呈现,您会得到更好的回应。很高兴展示您为解决问题而尝试做的事情,但我不明白一般问题是什么,我认为可能有一个更简单的解决方案。只需提供您的数据或解释您如何获得更多信息,我会尝试修改我的答案。
    猜你喜欢
    • 2019-11-06
    • 1970-01-01
    • 2012-02-15
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多