【问题标题】:ActionScript - Sorting XML File With Array.sortOn()?ActionScript - 使用 Array.sortOn() 对 XML 文件进行排序?
【发布时间】:2010-11-10 14:06:24
【问题描述】:

我需要对一个大型 XML 文件进行排序,并且我一直在阅读将每个元素放入数组中是使用 Array 的 sortOn() 方法对数据进行排序的方法。

我担心速度。也许将它们存储到 Vector。 而不是 Array 会稍微提高速度,或者不会,但是这种方法是对 XML 数据进行排序的最佳方法吗?

【问题讨论】:

    标签: xml arrays actionscript-3 sorting e4x


    【解决方案1】:

    实际上,我看到了两种解决方案:

    1/ 您加载了一个静态 xml 文件,因此您可以手动进行排序。

    2/ 您加载一个动态 xml 并为了提高速度,服务器端可以提供排序(在 PHP 中很容易)。 我认为这是更好的做法。

    所以在这两种情况下,您必须解析一次 xml,存储数据(向量、值对象)并通过销毁对 xml 的引用来清除内存。

    如果你想在 Flash 端进行排序,你必须创建自己的函数,并且使用方法 sortOn 似乎是不可避免的。

    【讨论】:

    • 在服务器上进行 PHP 排序可能是最好的主意,但在我的情况下,我不拥有或维护 XML 数据,因此也许仅在 ActionScript 中对其进行排序既容易维护又更快(或同样快)而不是在将其发送到 Flash 之前在我自己的 webserve 上对其进行过滤。
    • 我想我最后的评论没有多大意义,因为我忘了提到我正在构建一个 AIR 应用程序,而不是浏览器驻留的 .swf。所以我想对于 AIR 应用程序,我的解决方案是理想的,但对于使用 Flash 的网站,您的解决方案将是最好的。
    【解决方案2】:

    @TheDarklnl1978 以下是来自 fl.data.DataProvider 的部分源代码,用于将 XML 转换为数组(可在 Flash CS5 安装目录中找到):

    var xml:XML = obj as XML;
    retArr = [];
    var nodes:XMLList = xml.*;
    for each (var node:XML in nodes) {
        var obj:Object = {};
        var attrs:XMLList = node.attributes();
        for each (var attr:XML in attrs) {
            obj[attr.localName()] = attr.toString();
        }
        var propNodes:XMLList = node.*;
    for each (var propNode:XML in propNodes) {
            if (propNode.hasSimpleContent()) {
                obj[propNode.localName()] = propNode.toString();
            }
        }
        retArr.push(obj);
    }
    return retArr;
    

    【讨论】:

    • 啊,所以它确实使用了循环。我想我并不感到惊讶,否则该怎么做。谢谢你。
    【解决方案3】:

    所以,回答我自己的问题,我相信用 XML 创建一个 DataProvider 对象是最好的解决方案。

    将 XML 分配给 DataProvider 不需要设置并通过循环进行迭代,尽管可能会在幕后发生内部循环。我很想知道它是否有,所以如果你知道,请发表评论。

    此外,DataProvider 对象还支持排序、检索和灵活地创建列表、数据网格等。

    【讨论】:

    • 我相信这个解决方案非常适合 AIR 应用程序,而 kero_zen 的解决方案最适合浏览器驻留的 .swf
    猜你喜欢
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    相关资源
    最近更新 更多