Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ActionScript-使用Array.sortOn()对XML文件进行排序?_Xml_Arrays_Actionscript 3_Sorting_E4x - Fatal编程技术网

ActionScript-使用Array.sortOn()对XML文件进行排序?

ActionScript-使用Array.sortOn()对XML文件进行排序?,xml,arrays,actionscript-3,sorting,e4x,Xml,Arrays,Actionscript 3,Sorting,E4x,我需要对一个大的XML文件进行排序,我已经读到,将每个元素放入数组是使用数组的sortOn()方法对数据进行排序的方法 我担心速度。也许将它们存储到向量中。而不是数组将略微提高速度,但这种方法是对XML数据进行排序的最佳方法吗?因此,为了回答我自己的问题,我相信使用XML创建DataProvider对象是最好的解决方案 将XML分配给数据提供者不需要设置循环并通过循环进行迭代,尽管在幕后可能会发生内部循环。我想知道它是否有兴趣,所以如果你知道,请留下评论 此外,DataProvider对象还支持

我需要对一个大的XML文件进行排序,我已经读到,将每个元素放入数组是使用数组的sortOn()方法对数据进行排序的方法


我担心速度。也许将它们存储到向量中。而不是数组将略微提高速度,但这种方法是对XML数据进行排序的最佳方法吗?

因此,为了回答我自己的问题,我相信使用XML创建DataProvider对象是最好的解决方案

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


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

因此,回答我自己的问题,我认为使用XML创建DataProvider对象是最好的解决方案

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


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

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

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

2/若要加载动态xml并提高速度,服务器端可以提供排序(在PHP中很容易)。 我认为这是最好的办法

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


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

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

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

2/若要加载动态xml并提高速度,服务器端可以提供排序(在PHP中很容易)。 我认为这是最好的办法

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


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

@TheDarklnl1978这里是fl.data.DataProvider中转换数组中XML的部分源代码(可在Flash CS5安装目录中找到):


@这里的darkl1978是fl.data.DataProvider源代码的一部分,用于转换数组中的XML(可在Flash CS5安装目录中找到):


在服务器上进行PHP排序可能是最好的主意,但在我的情况下,我不拥有或维护XML数据,因此在ActionScript中对其进行排序可能比在发送到Flash之前在我自己的Web服务器上对其进行过滤更容易维护和更快(或同样快),你可以使用::)我想我最后的评论没有多大意义,因为我忘了提到我正在构建一个AIR应用程序,而不是一个浏览器驻留程序.swf。因此,我想对于AIR应用程序,我的解决方案是理想的,但对于使用Flash的网站,您的解决方案将是最好的。在服务器上进行PHP排序可能是最好的主意,但在我的情况下,我不拥有或维护XML数据,因此,也许在ActionScript中对其进行排序既更容易维护,又更快(或同样快)我想我最后的评论没有什么意义,因为我忘了提到我正在构建一个AIR应用程序,而不是一个常驻浏览器的.swf。所以我想对于AIR应用程序,我的解决方案是理想的,但是对于一个有Flash的网站,你的解决方案是最好的。啊,所以它确实使用了一个循环。我想我并不感到惊讶,不然怎么办呢。谢谢。啊,所以它确实使用了一个循环。我想我并不感到惊讶,不然怎么办呢。谢谢。我认为此解决方案非常适合于AIR应用程序,而kero_zen的解决方案最适合于浏览器驻留。swfi认为此解决方案非常适合于AIR应用程序,而kero_zen的解决方案最适合于浏览器驻留。swf
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;