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